怎样使MFC对话框程序的标题栏响应,弹出我的对话框!

女神打Boss 2015-09-10 05:08:23
程序的目的是不让对话框可移动,点击锁定后无论用鼠标怎么点都弹出我指定的对话框。

现在实现了程序除标题栏以外的部分,点标题栏还是正常响应,但我的目的是想点标题栏左键右键都弹出我的对话框,该怎么做?
当然也包括“-”和“x”也弹出我的对话框

求指导。

为确定我理解的标题栏是标题栏,上图一张
...全文
449 点赞 收藏 40
写回复
40 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fcqm8888 2015-09-17
这个问题需要解决,有用啊,努力吧。
回复
女神打Boss 2015-09-16
感谢37楼给出的范例,感谢各位大神的指导,结贴
回复
女神打Boss 2015-09-15
引用 32 楼 gz_qmc 的回复:
[quote=引用 24 楼 CKRGD 的回复:] 我就是想实现“锁定”按钮,当点锁定时点击程序所有地方都弹出输入密码的指定对话框,解锁后对话框和一般正常的对话框程序一样,我不知道你想说什么,但是你这种方法可以实现吗?
当然可以实现,而且非常简单,想要范例吗?[/quote] 大神加我 qq 1016286846
回复
gz_qmc 2015-09-15
点那个按钮就锁了
回复
gz_qmc 2015-09-15
回复
jacky_qiu 2015-09-14
可以考虑鼠标钩子吗? 可以勾住所有的鼠标点击消息!
回复
女神打Boss 2015-09-14
引用 27 楼 schlafenhamster 的回复:

UINT ht=CDialog::OnNcHitTest(point);
afxDump << ht << "\n";
没有错

回复
schlafenhamster 2015-09-14
那 UINT ht=CDialog::OnNcHitTest(point); afxDump << ht << "\n"; 没有错
回复
女神打Boss 2015-09-14
引用 25 楼 schlafenhamster 的回复:
vs2008
可能是 UINT ht=CDialogEx::OnNcHitTest(point);
检查 CsssDlg 由 哪个 dlg 派生

是CDialog吧?
回复
schlafenhamster 2015-09-14
vs2008 可能是 UINT ht=CDialogEx::OnNcHitTest(point); 检查 CsssDlg 由 哪个 dlg 派生
回复
女神打Boss 2015-09-14
引用 22 楼 gz_qmc 的回复:
引用 3 楼 CKRGD 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 搜“自绘标题栏”?
我不是要重绘,而是点锁定的时候标题栏响应鼠标事件的时候弹出我的对话框,不锁定的时候正常响应。
引用 4 楼 CKRGD 的回复:
引用 2 楼 worldy 的回复:
你创建一个无边框的对话框不就行了?
需要标题栏的,不然不锁定的时候怎么移动?
这充分说明你的脑袋已经进水,再以装不下新东西了,那还求教什么呢? 不要别人的标题栏,自绘一个标题栏,无非就是响应移动,最大化,最小化,关闭四个按钮 难道者还比你在原标题栏上更难???? 又或者你的想法才正宗?????????????才是正统????????????? 非要不走寻常路,显得你牛B?????????????????????[/quote] 我就是想实现“锁定”按钮,当点锁定时点击程序所有地方都弹出输入密码的指定对话框,解锁后对话框和一般正常的对话框程序一样,我不知道你想说什么,但是你这种方法可以实现吗?
回复
gz_qmc 2015-09-14
至于你解锁的功能可以这样修改 void CTestDlg::OnButton1() { if(isLock) { 开启密码对话框 if(密码通过) isLock=FALSE; } } 至于你要锁定的时候需要点标题栏目弹出密码框 那就需要自定义一个消息函数来同意调用密码对话框 然后分别在OnNcRButtonDown和OnNcLButtonDown里发送消息 范例等我做好给你发上来,最好给个QQ号,直接发给你
回复
gz_qmc 2015-09-14
看你脾气挺好嘛 你要不想自绘,可以这样解决 假设你的对话框类为CTestDlg 给对话框类增加1个变量表示锁定 BOOL isLock; 并在初始化的地方 isLock=FALSE; 给一个按钮实现锁定解锁功能 void CTestDlg::OnButton1() { isLock=!isLock; } 响应一下5个消息 WM_NCMOUSEMOVE WM_NCLBUTTONDOWN WM_NCLBUTTONUP WM_NCRBUTTONDOWN WM_NCRBUTTONUP 在每个响应函数里都加上 if(isLock) return;
void CTestDlg::OnNcMouseMove(UINT nHitTest, CPoint point) 
{
	if(isLock) return;	
	CDialog::OnNcMouseMove(nHitTest, point);
}

void CTestDlg::OnNcLButtonDown(UINT nHitTest, CPoint point) 
{
	if(isLock) return;	
	CDialog::OnNcLButtonDown(nHitTest, point);
}

void CTestDlg::OnNcLButtonUp(UINT nHitTest, CPoint point) 
{
	if(isLock) return;	
	CDialog::OnNcLButtonUp(nHitTest, point);
}

void CTestDlg::OnNcRButtonDown(UINT nHitTest, CPoint point) 
{
	if(isLock) return;	
	CDialog::OnNcRButtonDown(nHitTest, point);
}

void CTestDlg::OnNcRButtonUp(UINT nHitTest, CPoint point) 
{
	if(isLock) return;	
	CDialog::OnNcRButtonUp(nHitTest, point);
}
回复
gz_qmc 2015-09-14
引用 24 楼 CKRGD 的回复:
我就是想实现“锁定”按钮,当点锁定时点击程序所有地方都弹出输入密码的指定对话框,解锁后对话框和一般正常的对话框程序一样,我不知道你想说什么,但是你这种方法可以实现吗?
当然可以实现,而且非常简单,想要范例吗?
回复
schlafenhamster 2015-09-14
标题栏是2 ;有没有 ? if(ht!=HTCLIENT) { F9 这里, if(GetAsyncKeyState(VK_LBUTTON) & 0x8000)
回复
女神打Boss 2015-09-14
引用 29 楼 schlafenhamster 的回复:
怎么 总是 1? 鼠标移到 NC 是 什么 ? #define HTNOWHERE 0 #define HTCLIENT 1 #define HTCAPTION 2 #define HTSYSMENU 3 #define HTGROWBOX 4 你的窗口有没有 非客户区 (没有 标题栏 ?)
客户区是1,标题栏是2,左右和下面的边框是18
回复
schlafenhamster 2015-09-14
怎么 总是 1? 鼠标移到 NC 是 什么 ? #define HTNOWHERE 0 #define HTCLIENT 1 #define HTCAPTION 2 #define HTSYSMENU 3 #define HTGROWBOX 4 你的窗口有没有 非客户区 (没有 标题栏 ?)
回复
gz_qmc 2015-09-12
响应鼠标按下消息 发送消息PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM (point.x, point. y)); 就可以实现你全窗口你点那里都可以移动 就一句代码而已 你还是先把自己脑袋里的水到掉再说吧
回复
gz_qmc 2015-09-12
引用 3 楼 CKRGD 的回复:
引用 1 楼 zhao4zhong1 的回复:
搜“自绘标题栏”?
我不是要重绘,而是点锁定的时候标题栏响应鼠标事件的时候弹出我的对话框,不锁定的时候正常响应。
引用 4 楼 CKRGD 的回复:
引用 2 楼 worldy 的回复:
你创建一个无边框的对话框不就行了?
需要标题栏的,不然不锁定的时候怎么移动?
这充分说明你的脑袋已经进水,再以装不下新东西了,那还求教什么呢? 不要别人的标题栏,自绘一个标题栏,无非就是响应移动,最大化,最小化,关闭四个按钮 难道者还比你在原标题栏上更难???? 又或者你的想法才正宗?????????????才是正统????????????? 非要不走寻常路,显得你牛B?????????????????????
回复
fcqm8888 2015-09-12
1个软件开发出来就不在改进,是我们不够强大的致命伤。
回复
加载更多回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2015-09-10 05:08
社区公告
暂无公告