MFC 使窗口不能改变大小,而且只能最大化显示。
用ModifyStyle(WS_THICKFRAME,NULL);可以让窗口不改变大小但怎么样让窗口一开始就是最大化显示,而且,即使双击标题栏,也不能改变其大小(双击时会...
用ModifyStyle(WS_THICKFRAME, NULL); 可以让窗口不改变大小
但怎么样让窗口一开始就是最大化显示,而且,即使双击标题栏,也不能改变其大小(双击时会回到程序设计时手工绘制的原始大小),就只能最大化显示,或者最小化隐藏。
试过禁用最大化,但是双击标题栏还是能改变大小,而且变不回去了(因为禁用了最大化)。
顺带问另外一个问题,自定义了一个消息响应函数,当接受到消息后做一些处理,如果还没有处理完(消息响应函数未运行结束),这时候下一个消息已经发出了,那会怎么样?
同时运行两个消息处理函数,还是会等待上一个运行结束再运行,还是丢弃掉第二个消息? 展开
但怎么样让窗口一开始就是最大化显示,而且,即使双击标题栏,也不能改变其大小(双击时会回到程序设计时手工绘制的原始大小),就只能最大化显示,或者最小化隐藏。
试过禁用最大化,但是双击标题栏还是能改变大小,而且变不回去了(因为禁用了最大化)。
顺带问另外一个问题,自定义了一个消息响应函数,当接受到消息后做一些处理,如果还没有处理完(消息响应函数未运行结束),这时候下一个消息已经发出了,那会怎么样?
同时运行两个消息处理函数,还是会等待上一个运行结束再运行,还是丢弃掉第二个消息? 展开
1个回答
展开全部
你的是基于对话框的应用程序么?可以这样修改:
1、右击对话框类,重载虚函数 PreTranslateMessage, 完成以下代码,过滤标题栏的双击消息即可。
BOOL CMFCTestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_NCLBUTTONDBLCLK)
{
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
2、要使程序启动时就最大化,可以在对话框的 OnInitDialog 函数后面加入以下代码:
ShowWindow(SW_SHOWMAXIMIZED);
3、Windows的应用程序是有消息队列的,如果有第二个消息 Post 过来了,会进行排队,总之,消息是单个线程循环进行处理的。如果你写过第一个最原始的 WinMain 程序,会看到如下熟悉的代码:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
这个 GetMessage 就是从应用程序消息队列中取出消息往下执行。
追问
非常感谢,回答很专业。
再请教一个小问题,窗口最大化时(基于对话框的程序),是全屏最大化,也就是覆盖了系统任务栏,这个可不可以设置的啊?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询