2007-01-29 02:03:16| 分类: vc++ - 代码成就 |字号 订阅
WM_LButtonDown 消息响应处理 // 鼠标左键
void CDlgDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
CDialog::OnLButtonDown(nFlags, point);
}
按窗体任何位置都可移动窗体!-------------------------------------------
-----在无标题栏的窗体上右键功能实现:↓↓
WM_RButtonDown 消息响应处理 // 鼠标右键
void CDlgDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu menu,*sub;
menu.LoadMenu(IDR_MENU1); ////加载菜单
sub=menu.GetSubMenu(0);
ClientToScreen(&point);
sub->TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this);
CDialog::OnRButtonDown(nFlags, point);
}
-----------------------------------------------------------------------------------------------------------------
对于无标题栏的对话框,用鼠标移动它的简单方法为:对消息WM_NCHITTEST进行处理,然后做鼠标位置的判断,如果鼠标位置在要移动窗口的客户区,则返回为鼠标在标题栏的信号,也就是欺骗windows,让它误认为你在点击标题栏,于是,你就可以正常拖动窗口了。
WM_NCHITTEST 消息响应处理
让窗口部分区域起移动功能的作用!
函数GetWindowPlacement得到当前窗口在屏幕上的位置.
这个函数的参数类型为WINDOWPLACEMENT结构。原型为
typedef struct tagWINDOWPLACEMENT { /* wndpl */
UINT length;
UINT flags;
UINT showCmd;
POINT ptMinPosition;
POINT ptMaxPosition;
RECT rcNormalPosition;
} WINDOWPLACEMENT;
其中,第六个变量rcNormalPosition为窗口正常显示时的位置
UINT CTimeWakeDlg::OnNcHitTest(CPoint point)
{
UINT hit=CDialog::OnNcHitTest(point);
if(hit==HTCLIENT)
{
WINDOWPLACEMENT winplace;
GetWindowPlacement(&winplace);
int xp=winplace.rcNormalPosition.left;
int yp=winplace.rcNormalPosition.top;
if((point.x>xp)&&(point.x<xp+50)&&(point.y>yp)&&(point.y<yp+30))
return HTCAPTION;
else
return hit;
}
else
return hit;
}
好了,再在左上角画个图之类的,就更明显漂亮喽
联系客服