CreateWindow()样式参数被忽略
CreateWindow() style parameter being ignored?
在我的Windows应用程序中,我正在使用CreateWindow()函数创建一个新窗口。注册和窗口创建如下:
// Set up the capture window
WNDCLASS wc = {0};
// Set which method handles messages passed to the window
wc.lpfnWndProc = WindowMessageRedirect<CStillCamera>;
// Make the instance of the window associated with the main application
wc.hInstance = GetModuleHandle(NULL);
// Set the cursor as the default arrow cursor
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
// Set the class name required for registering the window and identifying it for future
// CreateWindow() calls
wc.lpszClassName = c_wzCaptureClassName.c_str();
RegisterClass(&wc); /* Call succeeding */
HWND hWnd = CreateWindow(
c_wzCaptureClassName.c_str() /* lpClassName */,
c_wzCaptureWindowName.c_str() /* lpWindowName */,
WS_OVERLAPPEDWINDOW | WS_MAXIMIZE /* dwStyle */,
CW_USEDEFAULT /* x */,
CW_USEDEFAULT /* y */,
CW_USEDEFAULT /*nWidth */,
CW_USEDEFAULT /* nHeight */,
NULL /* hWndParent */,
NULL /* hMenu */,
GetModuleHandle(NULL) /* hInstance */,
this /* lpParam */
);
if (!hWnd)
{
return false;
}
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
我继续使用该窗口,并用流媒体视频对其进行更新,这是正确的。然而,我作为CreateWindow()的dwStyle参数传递的任何内容似乎都会被忽略。该窗口没有标题栏、最小化或最大化按钮,正如人们在重叠窗口中所期望的那样。此外,窗口没有最大化。奇怪的是,将dwStyle更改为
WS_OVERLAPPEDWINDOW | WS_HSCROLL /* dwStyle */
现在,当鼠标悬停在窗口上但没有实际滚动条时,会显示双面左/右箭头。有人知道是什么导致了这种奇怪的行为吗?
绘制标题栏和其他类似内容需要将未处理的窗口消息传递给DefWindowProc
。例如,标题栏是在WM_NCPAINT
消息期间绘制的。如果你不把消息传递给DefWindowProc
,那就不会完成。
来自Microsoft文档中的注释:
WS_MINIMIZE和WS_MAXIMIZE样式可能会被忽略,具体取决于值创建进程时在STARTUPINF.dwFlags和STARTUPINFO.wShowWindow中指定。
最小化和最大化框必须使用WS_MINIMIZEBOX和WS_MAXIMIZEBOX显式启用。您可能想要WS_OVERLAPPEDWINDOW而不仅仅是WS_OVERLAPPED;这将包括最小化和最大化框。
相关文章:
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 解压缩 C 样式数组以及C++中的参数包
- C++ C 样式数组作为语法错误的参数
- 限制C++中允许的模板参数是否被认为是不良样式?
- C 样式将此或shared_from_this作为函数参数
- 如何将初始值设定项与右值引用参数一起使用 // 为什么不能使用另一个 C 样式数组变量初始化 C 样式数组
- Qt样式表和"一个参数"问题
- 为什么我可以通过这样的字符串参数?这种样式安全吗?
- C 函数对象模板参数扣除样式
- 具有列表参数C++11/C++14样式的求和函数
- C++,哪种参数样式更好,通过复制还是通过常量引用
- C/C++样式--修改函数参数
- C++样式:在构造函数主体中使用参数或成员
- 向 C 样式可变参数列表添加额外的参数
- C++ 传递 C 样式字符串作为参数
- 构造函数参数样式
- 为通过引用设置参数的函数命名的样式
- CreateWindow()样式参数被忽略
- 函数调用参数中的构造函数样式转换