- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 OpenGL 开发一个可移植层(为 Linux 和 Windows 抽象出 glX 和 wgl 的东西)...无论如何,它有一个创建窗口的方法...如果你不传入父级,你会得到一个带框架的真实窗口......如果你传入父级,你会得到一个无边框,无框架的窗口......
这工作正常,只要我在一个线程上完成这一切...只要另一个线程尝试创建子窗口,应用程序就会在 win32 调用“CreateWindow()”中死锁。有什么想法吗?
最佳答案
这不是一个真正的答案,但由于很多人似乎相信 Win32 禁止在父线程之外的其他线程中创建子线程,我觉得有必要发布一个相反的演示。
下面的代码演示了在属于不同进程 的父级上创建子窗口。它接受一个窗口句柄值作为命令行参数,并在该父窗口上创建一个子窗口。
// t.cpp
#include <windows.h>
#include <stdio.h>
#define CLASS_NAME L"fykshfksdafhafgsakr452"
static LRESULT CALLBACK WindowProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch ( msg )
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
break;
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int main( int argc, char* argv[] )
{
HWND parent = (argc >= 2) ? (HWND)strtoul(argv[1], 0, 0) : (HWND)0;
printf("parent: 0x%x\n", parent);
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = (HINSTANCE)GetModuleHandle(NULL);
wc.lpszClassName = CLASS_NAME;
wc.hbrBackground = (HBRUSH)(COLOR_ACTIVECAPTION + 1);
if ( !RegisterClass(&wc) )
{
printf("%d: error %d\n", __LINE__, GetLastError());
return 0;
}
const DWORD style = WS_CHILD | WS_VISIBLE;
HWND hwnd = CreateWindow(CLASS_NAME, L"Test", style, 50, 50, 100, 100,
parent, 0, wc.hInstance, 0);
if ( !hwnd )
{
printf("%d: error %d\n", __LINE__, GetLastError());
return 0;
}
MSG msg;
while ( GetMessage(&msg, 0, 0, 0) )
DispatchMessage(&msg);
return 0;
}
使用以下命令编译它(使用 MSVC 命令行环境):
cl /EHsc /DUNICODE /D_UNICODE t.cpp user32.lib
然后使用 Spy++ 或其他工具获取任何窗口的句柄值——例如记事本或浏览器的地址。我们假设它是 0x00001234。然后使用 t.exe 0x1234
运行编译后的示例。使用 Ctrl-C 终止 t.exe(或关闭控制台窗口)。
关于winapi - Win32 CreateWindow() 调用在子线程中挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1759093/
我无法创建自己的名为 CreateWindow 的函数,因为 win32 header 中已经定义了一个函数。只是我什至不能在我自己的命名空间中这样做。真正的问题是什么? MyNamespace::M
我刚刚开始使用 C++ 和创建窗口(在 Windows 上)。我正在使用 CreateWindow 函数,但出现错误 Error 2 error C2664: 'HWND CreateWind
我为我正在编写的 GUI 系统编写了一个主窗口类。在主窗口的构造函数中,它使用 CreateWindow() 函数创建一个 Windows 窗口。该窗口按预期正常显示,但我无法捕获标题栏并将其在屏幕上
在我的 Windows 应用程序中,我正在使用 CreateWindow() 函数创建一个新窗口。注册和创建窗口如下: // Set up the capture window WNDCLASS wc
我想在单击将成为主窗口子项的菜单项时使用 CreateWindow() 创建一个窗口。我知道我可以使用 DialogBox() 或 CreateDialog(),但我想使用 CreateWindow(
我开始使用 C++ 中的 win32 api,当我正要制作一个按钮时,智能感知显示“定义 CreateWindow CreateWindowA”。当我似乎悬停在下方时,它还会显示“错误:预期为 )”。
我正在为 OpenGL 开发一个可移植层(为 Linux 和 Windows 抽象出 glX 和 wgl 的东西)...无论如何,它有一个创建窗口的方法...如果你不传入父级,你会得到一个带框架的真实
您好,我想更改按钮的背景颜色。这是我的按钮代码 hwndTemp = CreateWindow(TEXT("BUTTON"), Str("Settings"), WS_CHILDWINDOW
我对 C++ 相当陌生,并且正在尝试学习在使用 CreateWindow(或 CreateWindowEx)函数为注册类创建的窗口上获取自定义填充颜色的最佳方法。 我编写了一个程序,演示了 3 种方法
您好,我想更改按钮的背景颜色。这是我的按钮代码 hwndTemp = CreateWindow(TEXT("BUTTON"), Str("Settings"), WS_CHILDWINDOW
我在使用 WINAPI 项目时遇到问题。有两个问题,当我用下面的代码启动一个窗口时,高度参数表现得很奇怪。它似乎以 1092 为上限,比我在计算机上需要的位置低 18 个像素。第二个问题是窗口没有边缘
在尝试用 C++ 创建窗口并绘制窗口大小与我设置的大小不匹配的矩形时,我注意到一些非常烦人的事情。 例如,如果我设置 480x240 窗口并尝试通过获取 GetWindowRect(hwnd, &re
我正在使用纯 Win32 API(RegisterClass 和 CreateWindow 函数)创建窗口。如何为窗口指定一种字体而不是系统定义的字体? 最佳答案 当您创建自己的窗口类时,您有责任自己
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Windows Taskbar API Win32: How to hide 3rd party windo
我创建了一个句柄为 handle_parent 的窗口。然后我创建了一个子窗口如下: hwnd_child = CreateWindow(child_class_name, _T(""), WS_CH
我的任务是重新创建具有类似于 Windows 截图工具功能的应用程序。其中之一是捕获当前事件窗口的屏幕截图,这就是导致我出现问题的原因。一切都几乎完美无缺,但是应用程序的“截图”比实际应用程序大几个像
在我的应用程序中,函数 CreateWindow 由于某种原因失败了。 GetLastError 表示错误 1407,根据 MSDN 文档,这是“找不到窗口类”。以下代码显示了如何调用 CreateW
我创建了一个 Electron 应用程序,主要是一个 Web 应用程序,与 Electron 应用程序有少量集成。大多数只是通过带有 loadURL 的 BrowserWindow 加载网站。 但是,
我的程序有一个静态界面,但我不知道制作界面的最佳方法是什么。使用资源文件或使用 WM_CREATE 消息的 CreateWindow 函数? 谢谢 最佳答案 我建议首先从对话框资源开始。然后,如果/当
采用以下代码: # pragma once // Windows specific files #include #include #include #include #include "IO
我是一名优秀的程序员,十分优秀!