OnSysCommand的问题,高分! CXXXXDlg::OnSysCommand(SC_MINIMIZE,0); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然不行,OnSysCommand响应的是WM_SYSCOMMAND消息。你不妨试试SendMessage()参数指定为最小化或者移动等的消息ID即可。 最小化SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));最大化SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, MAKELPARAM(point.x, point.y));恢复SendMessage(WM_SYSCOMMAND, SC_RESTORE, MAKELPARAM(point.x, point.y)); 一般这种判断放在,WM_NCMOUSELDOWN里,原参数就有point.x, point.y呵呵,绝对可用,别忘给分 SendMessage(hwnd,WM_SYSCOMMAND,SC_MINIMIZE,NULL); 好啊,可以也随便问一下,发送SC_MOVE的时候,老是要按空格键才能移动有没有办法不要空格键就移动的? 请看MSDN说明:WM_SYSCOMMAND messages not handled by the application must be passed on to OnSysCommand. Any command values added by an application must be processed by the application and cannot be passed to OnSysCommand.说明普通按钮不能响应WM_SYSCOMMAND消息。 用鼠标单击窗口标题条以外区域移动窗口 移动标准窗口是通过用鼠标单击窗口标题条来实现的,但对于没有标题条的窗口,就需要用鼠标单击窗口标题条以外区域来移动窗口。有两种方法可以达到这一目标。 方法一:当窗口确定鼠标位置时,Windows向窗口发送WM_NCHITTEST消息,可以处理该消息,使得只要鼠标在窗口内,Windows便认为鼠标在标题条上。这需要重载CWnd类处理WM_NCHITTEST消息的OnNcHitTest函数,在函数中调用父类的该函数,如果返回HTCLIENT,说明鼠标在窗口客户区内,使重载函数返回HTCAPTION,使Windows误认为鼠标处于标题条上。 下例是使用该方法的实际代码: UINT CEllipseWndDlg::OnNcHitTest(CPoint point) { // 取得鼠标所在的窗口区域 UINT nHitTest = CDialog::OnNcHitTest(point); // 如果鼠标在窗口客户区,则返回标题条代号给Windows // 使Windows按鼠标在标题条上类进行处理,即可单击移动窗口 return (nHitTest==HTCLIENT) ? HTCAPTION : nHitTest; } 方法二:当用户在窗口客户区按下鼠标左键时,使Windows认为鼠标是在标题条上,即在处理WM_LBUTTONDOWN消息的处理函数OnLButtonDown中发送一个wParam参数为HTCAPTION,lParam为当前坐标的WM_NCLBUTTONDOWN消息。 下面是使用该方法的实际代码: void CEllipseWndDlg::OnLButtonDown(UINT nFlags, CPoint point) { // 调用父类处理函数完成基本操作 CDialog::OnLButtonDown(nFlags, point); // 发送WM_NCLBUTTONDOWN消息 // 使Windows认为鼠标在标题条上 PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y)); } 世界坐标是否可以转换成屏幕坐标? 关于图像放大的算法编程(请熟悉Windows 编程的高手进) 方便的话请投我女儿一票吧! ReadDirectoryChangesW的调用是阻塞吗? 请问关于用creatergn实现不规则窗口的问题 MSDN上没说错吧?GetItemData(sel); vc怎样动态该变控件的属性? 哪里有免费下载<thinking in c++>等图书的? vc中有关数据库操作的问题,各位一定要帮我,急死我了 编译代码报错,请求指点。 如何在SDK中引用MFC中的类, 如何将struct在vc++中成功的转换成类?再送100分
你不妨试试SendMessage()参数指定为最小化或者移动
等的消息ID即可。
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));
最大化
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, MAKELPARAM(point.x, point.y));
恢复
SendMessage(WM_SYSCOMMAND, SC_RESTORE, MAKELPARAM(point.x, point.y));
随便问一下,发送SC_MOVE的时候,老是要按空格键才能移动
有没有办法不要空格键就移动的?
WM_SYSCOMMAND messages not handled by the application must be passed on to OnSysCommand. Any command values added by an application must be processed by the application and cannot be passed to OnSysCommand.
说明普通按钮不能响应WM_SYSCOMMAND消息。
移动标准窗口是通过用鼠标单击窗口标题条来实现的,但对于没有标题条的窗口,
就需要用鼠标单击窗口标题条以外区域来移动窗口。有两种方法可以达到这一目标。 方法一:当窗口确定鼠标位置时,Windows向窗口发送WM_NCHITTEST消息,可以处
理该消息,使得只要鼠标在窗口内,Windows便认为鼠标在标题条上。这需要重载
CWnd类处理WM_NCHITTEST消息的OnNcHitTest函数,在函数中调用父类的该函数,
如果返回HTCLIENT,说明鼠标在窗口客户区内,使重载函数返回HTCAPTION,
使Windows误认为鼠标处于标题条上。 下例是使用该方法的实际代码: UINT CEllipseWndDlg::OnNcHitTest(CPoint point)
{
// 取得鼠标所在的窗口区域
UINT nHitTest = CDialog::OnNcHitTest(point);
// 如果鼠标在窗口客户区,则返回标题条代号给Windows
// 使Windows按鼠标在标题条上类进行处理,即可单击移动窗口
return (nHitTest==HTCLIENT) ? HTCAPTION : nHitTest;
} 方法二:当用户在窗口客户区按下鼠标左键时,使Windows认为鼠标是在标题条上,
即在处理WM_LBUTTONDOWN消息的处理函数OnLButtonDown中发送一个wParam参数为
HTCAPTION,lParam为当前坐标的WM_NCLBUTTONDOWN消息。 下面是使用该方法的实际代码: void CEllipseWndDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// 调用父类处理函数完成基本操作
CDialog::OnLButtonDown(nFlags, point);
// 发送WM_NCLBUTTONDOWN消息
// 使Windows认为鼠标在标题条上
PostMessage(WM_NCLBUTTONDOWN,
HTCAPTION,
MAKELPARAM(point.x, point.y));
}