Почему нельзя создать дочернее окно?

Может кто-нибудь сказать мне, почему дочернее окно не может быть создано?
Я использую руководство по подделке win32api, но не могу понять, в чем проблема.

Когда программа запускается, у меня есть все элементы управления, но когда я нажимаю на «новый» пункт меню, я получаю сообщение об ошибке. Это сразу после winmain.

Другие вещи, такие как элементы меню, инструмент и строки состояния, открытие или сохранение файлов работает.

**HWND CreateNewMDIChild(HWND hMDIClient)
{
MDICREATESTRUCT mcs;
HWND hChild;
mcs.szTitle = "[Untitled]";
mcs.szClass = g_szChildClassName;
mcs.hOwner  = GetModuleHandle(NULL);
mcs.x = mcs.cx = CW_USEDEFAULT;
mcs.y = mcs.cy = CW_USEDEFAULT;
mcs.style = MDIS_ALLCHILDSTYLES;
hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);

if(!hChild)
{
MessageBox(hMDIClient, "MDI Child creation failed.", "Oh Oh...",
MB_ICONEXCLAMATION | MB_OK);
}
return hChild;

}**

0

Решение

Это неудачная ошибка в образец кода, это препятствует тому, чтобы это работало на 64-разрядной Windows. Конечный параметр для Отправить сообщение имеет тип LPARAM (псевдоним для LONG_PTR). Приведение к LONG усекает его до 4 байтов, что недостаточно для 64-битного указателя (см. Диапазоны типов данных).

Измените следующую строку

hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);

в

hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LPARAM)&mcs);

и код должен работать как положено.

1

Другие решения


По вопросам рекламы [email protected]