请教在基于Dialog的MFC程序中,如何让窗口不能移动? 我做了个基于Dialog的MFC程序,请教如何让该窗口不能移动? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 处理WM_NCHITTEST消息,限制窗口改变大小或者移动:UINT CMainFrame::OnNcHitTest(CPoint point){ UINT hit = CFrameWnd::OnNcHitTest(point);#ifdef _DEBUG // For debugging, display default hit code LPCTSTR s = "Unknown"; for (int i=0; HtCodes[i].name; i++) { if (hit == HtCodes[i].id) { s = HtCodes[i].name; break; } } TRACE(_T("CMainFrame::OnNcHitTest: %s"), s);#endif // disallow these codes: map to HTNOWHERE static char DisallowCodes[] = { HTLEFT,HTRIGHT,HTTOP,HTTOPLEFT,HTTOPRIGHT, HTBOTTOM,HTBOTTOMLEFT,HTBOTTOMRIGHT,HTSIZE,HTCAPTION }; if (strchr(DisallowCodes, hit)) { TRACE(" -- disallowed\n"); return HTBORDER; } TRACE("\n"); return hit;} to:kugou123(酷狗)我的是基于Dialog的,我没有找到CMainFrame这个类,好象也没有WM_NCHITTEST消息 基于Dialog的肯定找不到咯,呵呵 我帮楼主找到了办法,重载对话框的左键消息函数:OnNcLButtonDown,注释掉其中调用父类消息函数的语句,如//CMDIChildWnd::OnNcLButtonDown(nHitTest, point); 或者在应用类中重载系统命令消息函数OnSysCommand(UINT nID, LPARAM lParam), if(nID!=61458)//61458应该是左键单击ID,我不知道移动窗口的命令ID是多少 CDialog::OnSysCommand(nID, lParam);屏蔽移动命令 agree to domustdohz(迷茫)把对话框的Border属性设为None,自己再画一个标题栏 别死心眼,你还想在非客户区做什么? if(nHitTest!=HTCAPTION)--To楼上的:这样会不会连点击最大最小和关闭窗口都不行了。 将窗口Border设置为Dialog FrameLRESULT CTESTDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class if (wParam!=HTCAPTION) return CDialog::DefWindowProc(message, wParam, lParam);} 跪求研究webkit步骤 请问visual C 与MFC的区别和关系? 问个关于异步提交的问题 QQ2009的调色、底纹、皮肤怎么实现的 请教dll程序和客户程序可以同时using namespace ADODB吗? 谁有远程屏幕控制的源代码共享啊? 什么是虚拟仪器技术,如何在VC++中实现? 各位高手,在win下面怎样进行绝对扇区读写?有简洁一点的代码么 关于RegQueryValueEx的问题 给分! CDialog与CPropertySheet 菜鸟问题 如何在VC中实现类似资源管理器的界面,!!!!!!!!!!!!!!
{
UINT hit = CFrameWnd::OnNcHitTest(point);
#ifdef _DEBUG
// For debugging, display default hit code
LPCTSTR s = "Unknown";
for (int i=0; HtCodes[i].name; i++) {
if (hit == HtCodes[i].id) {
s = HtCodes[i].name;
break;
}
}
TRACE(_T("CMainFrame::OnNcHitTest: %s"), s);
#endif // disallow these codes: map to HTNOWHERE
static char DisallowCodes[] = {
HTLEFT,HTRIGHT,HTTOP,HTTOPLEFT,HTTOPRIGHT,
HTBOTTOM,HTBOTTOMLEFT,HTBOTTOMRIGHT,HTSIZE,HTCAPTION }; if (strchr(DisallowCodes, hit)) {
TRACE(" -- disallowed\n");
return HTBORDER;
}
TRACE("\n");
return hit;
}
重载对话框的左键消息函数:OnNcLButtonDown,注释掉其中调用父类消息函数的语句,如
//CMDIChildWnd::OnNcLButtonDown(nHitTest, point);
, if(nID!=61458)//61458应该是左键单击ID,我不知道移动窗口的命令ID是多少
CDialog::OnSysCommand(nID, lParam);
屏蔽移动命令
把对话框的Border属性设为None,自己再画一个标题栏
if(nHitTest!=HTCAPTION)
--
To楼上的:这样会不会连点击最大最小和关闭窗口都不行了。
{
// TODO: Add your specialized code here and/or call the base class
if (wParam!=HTCAPTION)
return CDialog::DefWindowProc(message, wParam, lParam);
}