网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
实现窗体自动隐藏
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式

最近写个小程序,想让窗体自动隐藏,到csdn搜索,发现不少网友问这个问题,可是具体实现的例子不多,我经过琢磨,实现可记录停靠位置,可左上右三方停靠并隐藏。现将实现的例子拿出来供大家参考。
实现窗体自动隐藏方法有多种,可以使用定时器,不断监视鼠标,当鼠标移动到窗体边缘时,显示窗体,当鼠标离开后隐藏窗体。也可以在鼠标收到WM_NCMOUSEMOVE或 WM_MOUSEMOVE(无边框窗体)时激活窗体,然后在窗体消息WM_ACTIVE中设置显示或隐藏,这种方法在窗体未失去焦点时不会隐藏。我在原本的设计中便使用这种方法,只是在设计时发现非主窗体不太合适,激活窗体时会出现两个键盘焦点,而且我所需要的焦点是虚假的,可能我的设计不当,那位朋友若能完美实现,不妨交流一下。
本代码的流程如下:
1. 初始化窗体时设置窗体位置,并设置依靠状态窗体状态。
2. 当接收到WM_MOUSEMOVE消息时,检查窗体是否显示,若否,显示,并打开定时器。
3. 在WM_MOVING中检测窗体位置,并自动靠拢边界。
4. 在定时器中检测鼠标,当鼠标离开窗体后,关闭定时器,隐藏窗体。
当然,在隐藏窗体时首先判断位置,若停靠在边缘,则隐藏,否则,不隐藏。
现在我们一步步看代码。
int             alignType;   //全局变量,用于记录窗体停靠状态
enum
{
ALIGN_NONE,          //不停靠
ALIGN_TOP,          //停靠上边
ALIGN_LEFT,          //停靠左边
ALIGN_RIGHT          //停靠右边
};
#define NEAR_SIZE 20 //定义自动停靠有效距离
#define NEAR_SIDE 2 //窗体隐藏后在屏幕上保留的像素,以使鼠标可以触及
/*
下面代码处理窗体消息WM_MOVING,pRect是由参数lParam传来的指针
*/
void            OnMoving(HWND hWnd, LPRECT pRect)
{
//未靠边界由pRect测试
if (alignType == ALIGN_NONE)
{
  if (pRect->top < NEAR_SIZE) //在上边有效距离内,自动靠拢。
  {
   alignType = ALIGN_TOP;
   pRect->bottom -= pRect->top;
   pRect->top = 0;
  }
  if (pRect->left < NEAR_SIZE) //在左边有效距离内
  {
   alignType = ALIGN_LEFT;
   pRect->right -= pRect->left;
   pRect->left = 0;
  }
  else if (pRect->right + NEAR_SIZE > ScreenX) //在右边有效距离内,ScreenX为屏幕宽度,可由GetSystemMetrics(SM_CYSCREEN)得到。
  {
   alignType = ALIGN_RIGHT;
   pRect->left += (ScreenX - pRect->right);
   pRect->right = ScreenX;
  }

}
else
{
  //靠边界由鼠标测试
  POINT           pt;
  GetCursorPos(&pt);
  if (alignType == ALIGN_TOP)
  {
   if (pt.y > NEAR_SIZE) //由于我们移动窗体时,鼠标在标题栏内,当鼠标位置超过有效距离后,我们可以考虑用户要向下拖动鼠标。我们便解除上部停靠。
   {
    alignTyp

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号