VisualC++设计超强仿QQ自动伸缩窗口(2)

VisualC++设计超强仿QQ自动伸缩窗口(2),第1张

VisualC++设计超强仿QQ自动伸缩窗口(2),第2张

然后在构造函数初始化成员变量:

m_isSizeChanged = FALSE;m_isSetTimer = FALSE;m_hsFinished = TRUE;m_hiding = FALSE;m_oldWndHeight = MINCY;m_taskBarHeight = 30;m_edgeHeight = 0;m_edgeWidth=0;m_hideMode = HM_NONE;


  完成了一些初始的工作,那么就开始进入关键的函数实现了。首先是在OnCreate做些窗口的初始化和获得一些系统信息。

  代码一

int CQQHideWndDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CDialog::OnCreate(lpCreateStruct) == -1)return -1; // TODO: Add your specialized creation code here//获得任务栏高度CWnd* p;p = this->FindWindow("Shell_TrayWnd",NULL);if(p != NULL){CRect tRect;p->GetWindowRect(tRect);m_taskBarHeight = tRect.Height();}//修改风格使得他不在任务栏显示ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);//去掉关闭按键(如果想画3个按键的话)//ModifyStyle(WS_SYSMENU,NULL);//获得边缘高度和宽度m_edgeHeight = GetSystemMetrics(SM_CYEDGE);m_edgeWidth = GetSystemMetrics(SM_CXFRAME);return 0;}


  接着如何知道鼠标进入或移出窗口呢?在前面我已经证明了WM_MOUSEMOVE和WM_MOUSELEAVE不符合我们的要求,于是我用了WM_ NCHITTEST这个消息,你可以看到我在这个消息响应函数中用了两个SetTimer,一个用于检测鼠标是否离开,一个用于伸缩过程,不管你喜欢不喜欢,要达到第7点和第11点,这个是必须的,考虑的效率问题,在不需要的时候关闭这些Timer就好了。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » VisualC++设计超强仿QQ自动伸缩窗口(2)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情