Структура проста: у меня есть главное окно, в которое я помещаю некоторые текстовые поля и меню.
Если я создам окно следующим образом:
Код: Выделить всё
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int cShow) {
MSG msg;
HWND hVentana;
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = cVentana;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = L"MainWindowClass";
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if (!RegisterClassEx(&wc)) {
MessageBox(NULL, L"Fallo al registrar la clase de ventana.", L"Error", MB_OK | MB_ICONERROR);
return 0;
}
hVentana = CreateWindowEx(0, L"MainWindowClass", L"Emulador", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1600, 900, NULL, NULL, hInst, NULL);
if (!hVentana) {
MessageBox(NULL, L"Fallo al crear la ventana.", L"Error", MB_OK | MB_ICONERROR);
return 0;
}
HMENU hMenu = LoadMenu(hInst, L"IDD_MENU1"); // El menu está definido en resource.rc
SetMenu(hVentana, hMenu);
HWND hTextBox = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_READONLY | ES_AUTOVSCROLL | ES_MULTILINE,
10, 10, 387, 824, hVentana, NULL, GetModuleHandle(NULL), NULL);
HWND hRamBox = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_READONLY | ES_AUTOVSCROLL | ES_MULTILINE,
407, 477, 785, 309, hVentana, NULL, GetModuleHandle(NULL), NULL);
HWND hSearchBox = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
407, 796, 785, 38, hVentana, NULL, GetModuleHandle(NULL), NULL);
HWND hTerminalBox = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_READONLY | ES_AUTOVSCROLL | ES_MULTILINE,
407, 60, 785, 405, hVentana, NULL, GetModuleHandle(NULL), NULL);
HWND hRegistrosBox = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_READONLY | ES_AUTOVSCROLL | ES_MULTILINE,
1202, 10, 374, 824, hVentana, NULL, GetModuleHandle(NULL), NULL);
ShowWindow(hVentana, cShow);
UpdateWindow(hVentana);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

Но если я сделаю это вот так:
Код: Выделить всё
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int cShow) {
MSG msg;
HWND hVentana;
hVentana = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, cVentana);
ShowWindow(hVentana, cShow);
UpdateWindow(hVentana);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

У меня есть ресурс меню и ресурс диалога:
Код: Выделить всё
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDD_MENU1 MENU
BEGIN
POPUP "Archivo"
BEGIN
MENUITEM "Cargar programa", ID_LOADPROGRAM
MENUITEM "Cargar campaña", ID_LOADCAMPAING
MENUITEM "Salir", ID_EXIT
END
POPUP "Generar"
BEGIN
MENUITEM "Informe de instrucciones", ID_GENERAR_INFORMEDEINSTRUCCIONES
MENUITEM "Archivo RAM", ID_GENERAR_ARCHIVORAM
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_DIALOG1 DIALOGEX 0, 0, 1600, 900
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU
CAPTION "Emulador"
MENU IDD_MENU1
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
EDITTEXT IDC_TEXTBOX,10,10,387,824,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_TABSTOP
EDITTEXT IDC_RAMBOX,407,477,785,309,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_TABSTOP
EDITTEXT IDC_SEARCHBOX,407,796,785,38,ES_AUTOHSCROLL | NOT WS_TABSTOP
EDITTEXT IDC_TERMINALBOX,407,60,785,405,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_TABSTOP
EDITTEXT IDC_REGISTERSBOX,1202,10,374,824,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_TABSTOP
END
ПРИМЕЧАНИЕ. Кроме того, по какой-либо причине, когда я использую первую форму, размеры окна правильные, но если я использую вторую форму, то окно будет больше, чем указанные мной размеры.ПРИМЕЧАНИЕ.>
Подробнее здесь: https://stackoverflow.com/questions/783 ... -in-winapi