WinAPI 窗口在绘制后不刷新
winapi window doesn't refresh after painting
嗨,我用这个创建了一个窗口:
WNDCLASSEX WndClass = {0};
if (WndClass.cbSize == 0)
{
WndClass.cbSize = sizeof(WNDCLASSEX);
WndClass.style = CS_DBLCLKS;
WndClass.lpfnWndProc = WindowProcedure;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = GetModuleHandle(NULL);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = HBRUSH(COLOR_WINDOW+1);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = ClassName.c_str();
WndClass.hIconSm = LoadIcon( NULL, IDI_APPLICATION);
}
if (RegisterClassEx(&WndClass))
{
WindowHandle = CreateWindowEx(0, ClassName.c_str(), WindowName.c_str(), WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,
CW_USEDEFAULT, CW_USEDEFAULT, Width, Height, NULL, NULL, GetModuleHandle(NULL), NULL);
if(WindowHandle)
{
ShowWindow(WindowHandle, SW_SHOWDEFAULT);
}
}
并尝试添加一个按钮。使用此:
HWND child = CreateWindowEx(0, L"BUTTON", NULL, WS_CHILD | WS_VISIBLE, n * CHILDS_OFSET, posY, GetWidth(), h, window, NULL, NULL, NULL);
代码执行后,我的窗口保持清晰,但若我移动它或调整它的大小,按钮就会变为可见,这可能是什么问题?
我试过了:
RECT rc;
GetClientRect(window, &rc);
InvalidateRect(window, &rc, TRUE);
如果window
是主窗口和按钮的句柄,则已尝试。
如果您的窗口过程没有正确处理WM_PAINT
,就会发生这种情况。你必须拥有的最低限度的东西是
...
case WM_PAINT:
{
PAINTSTRUCT ps;
BeginPaint( wnd, &ps );
EndPaint( wnd, &ps );
return 0;
}
我认为您需要在ShowWindow
之后调用UpdateWindow
,请参阅此处。
相关文章:
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- SFML 文本未绘制在窗口上
- 是否可以配置提升日志刷新?
- 如何在qt中同步应用程序和显示器的刷新率?
- 如何在快板的屏幕中显示子位图的绘制?
- 如何绘制自定义形状的元素?
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- 绘制文本问题
- 调用Qpainter的方法绘制以刷新图像和更改颜色
- WinAPI 窗口在绘制后不刷新
- 所有者绘制按钮强制刷新