1、Duilib中禁止一个窗口双击最大化
用duilib开发了一个窗口,比如是登录窗口,那么这个窗口的窗口的双击最大化就毫无意义,甚至带来灾难,我们就要明确禁止这样的行为。
我们应该明确,一个窗口创建的时候就赋予了它一些属性,那我们就首先看看如何创建窗口的,即Create函数。
例如,你定义了一个窗口类叫main_wnd_frame,你会在需要的时候这用进行创建一个窗口:
//生成的窗口名字
const LPCTSTR MainWndFrame::kClassName = _T("main_wnd_frame");
//theme文件下的xml文件
const LPCTSTR MainWndFrame::kMainWndFrame = _T("main_wnd_frame.xml");
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
//UNREFERENCED_PARAMETER(hPrevInstance);
//UNREFERENCED_PARAMETER(lpCmdLine);
// 设置窗口关联的实例
CPaintManagerUI::SetInstance(hInstance);
// 设置皮肤的默认路径
CPaintManagerUI::SetCurrentPath(CPaintManagerUI::GetInstancePath());
//theme文件夹
CPaintManagerUI::SetResourcePath(_T("theme"));
//theme压缩包
//CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());
//CPaintManagerUI::SetResourceZip(_T("theme.zip"));
// 创建窗口
MainWndFrame* pMainWndFrame = new MainWndFrame();
if (nullptr == pMainWndFrame){
return 0;
}
pMainWndFrame->Create(nullptr, MainWndFrame::kClassName, UI_WNDSTYLE_FRAME, 0);
pMainWndFrame->CenterWindow();
pMainWndFrame->ShowWindow();
CPaintManagerUI::MessageLoop();
if (nullptr != pMainWndFrame)
{
delete pMainWndFrame;
}
return 0;
}
我们注意到Create的第三个参数是宏定义,可以看出是跟windows style相关的一些定义,那我们就看看吧:
#define UI_WNDSTYLE_FRAME (WS_VISIBLE | WS_OVERLAPPEDWINDOW)
#define UI_WNDSTYLE_DIALOG (WS_VISIBLE | WS_POPUPWINDOW | WS_CAPTION | WS_DLGFRAME | WS_CLIPSIBLINGS | WS_CLIPCHILDREN)
这里呢,我们注意是分析一下UI_WNDSTYLE_FRAME 和 UI_WNDSTYLE_DIALOG 的区别所在:
UI里的宏
窗体样式宏
-
UI_WNDSTYLE_CONTAINER :容器样式,无任何样式。
-
UI_WNDSTYLE_FRAME :UI标准框架窗体样式(标题栏、边框、图标、标题、最大、最小按钮、关闭按钮)。
-
UI_WNDSTYLE_CHILD :UI窗体子控件样式。
-
UI_WNDSTYLE_DIALOG :UI对话框窗体样式扩展窗体样式宏。
-
UI_WNDSTYLE_EX_FRAME: 窗体客户区凹陷样式。
-
UI_WNDSTYLE_EX_DIALOG :工具栏窗口样式+模式对话框样式。
因此 如果我们想要禁止双击最大化,那再创建窗口的时候就使用UI_WNDSTYLE_DIALOG 这个宏定义。