Duilib中禁止一个窗口双击最大化

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;
}

Duilib中禁止一个窗口双击最大化_第1张图片
我们注意到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)

Duilib中禁止一个窗口双击最大化_第2张图片
这里呢,我们注意是分析一下UI_WNDSTYLE_FRAMEUI_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 这个宏定义。

你可能感兴趣的:(DuiLib,ui,xml,c++)