对话框不创建WinAPI
Dialog boxes are not created WinAPI
如果我为主窗口创建一个子窗口(在本例中为窗口"About"),则由于某种原因不会调用对话框。如果您不这样做,子窗口是一个对话框称为正常和工作正常。GetLastError返回错误号1812(指定的映像文件不包含资源段)。但是从资源文件来看,一切都很好。正如我所说,如果不创建子窗口,那么一切都可以正常工作。有什么问题吗?
#include <windows.h>
#include "resource.h"
LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK PointsProc(HWND hPoints, UINT message, WPARAM wParam,LPARAM lParam);
HINSTANCE hInst;
HWND hPoints;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hInst = hInstance;
HWND hwnd;
MSG msg;
WNDCLASS w;
memset(&w,0,sizeof(WNDCLASS));
w.style = CS_HREDRAW | CS_VREDRAW;
w.lpfnWndProc = WndProc;
w.hInstance = hInstance;
w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
w.lpszClassName = L"My Class";
RegisterClass(&w);
hwnd = CreateWindow(L"My Class", L"My title", WS_OVERLAPPEDWINDOW,
300, 200, 200, 180, NULL, NULL, hInstance, NULL);
HMENU main_menu = CreateMenu();
AppendMenu(main_menu, MF_STRING, 1111, L"Box");
WNDCLASS w2;
memset(&w2, 0, sizeof(WNDCLASS));
w2.lpfnWndProc = (WNDPROC)PointsProc;
w2.hInstance = hInst;
w2.lpszClassName = L"About";
w2.hCursor = LoadCursor(NULL, IDC_ARROW);
w2.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(111, 111, 111));
RegisterClass(&w2);
hPoints = CreateWindowEx(0, L"About", (LPCTSTR) NULL,
WS_CHILD | WS_BORDER | WS_VISIBLE | WS_DISABLED, 10, 10,
100, 100, hwnd, (HMENU)1112, hInst, NULL);
ShowWindow(hPoints,SW_NORMAL);
UpdateWindow(hPoints);
SetMenu(hwnd, main_menu);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
switch (Message)
{
case WM_COMMAND:
switch(LOWORD(wparam))
{
case 1111:
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwnd, About);
return 0;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, Message, wparam, lparam);
}
return 0;
}
LRESULT CALLBACK PointsProc(HWND hPoints, UINT message, WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
break;
default:
return DefWindowProc(hPoints, message, wParam, lParam);
}
return 0;
}
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
对话框被调用,只是PointsProc()
正在循环,需要很长时间…
问题是break;
在PointsProc()
中处理WM_PAINT
时-然后跳过调用DefWindowProc()
,因此窗口不断获得WM_PAINT消息,因为窗口仍然无效。
// case WM_PAINT:
// break;
相关文章:
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- WinAPI 无法创建按钮
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- 隐藏由 WinAPI 调用创建的窗口
- Winapi创建选项卡菜单
- 调用函数来创建 WinAPI 按钮不会执行任何操作
- 使用 WinAPI 创建自定义菜单的最佳方法是什么
- WINAPI EnumWindowsProc:非标准语法;使用 & 创建指向成员的点
- C Winapi在已安装的VHD上创建多个分区
- 如何在winApi上正确创建按钮以及处理其消息
- Winapi:在类成员功能上创建新线程 - 不兼容的参数类型
- WinApi - 创建文件invalid_handle_value
- WinAPI 创建文件函数 2.
- WinAPI 创建窗口 + 子窗口,处理一个按钮按下
- WINAPI 创建窗口显示奇怪的结果
- 从字节数组c++ winapi创建句柄
- WinAPI:创建可调整大小的窗口,没有标题栏,但有最小化/最大化/关闭按钮(如Firefox/Chrome/Opera
- 从png, winapi创建透明图像
- 使用WinAPI创建具有透明背景的文本标签
- 重定向计数到用winapi创建的新缓冲区