2013-09-03 2 views
-1

주 창 외에도 다른 최상위 창을 만들려고합니다. 문제는 두 번째 창의 hMenu 매개 변수를 NULL이 아닌 값으로 설정하면 표시되지 않는다는 것입니다. 예를 들어NULL이 아닌 hMenu 매개 변수로 창 만들기가 실패합니다.

:이 창 (HMENU == 0)를 나타

case IDC_BUTTON_SEND_COMMAND: 
{ 
    CreateWindowExW(NULL, 
        L"CommandWindow", L"Send Command", 
        WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 
        100, 100, 600, 400, 
        NULL, 
        (HMENU)0, 
        (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL); 
    break; 
} 

이 창은 표시되지 않습니다 (HMENU == 4)

case IDC_BUTTON_SEND_COMMAND: 
{ 
    CreateWindowExW(NULL, 
        L"CommandWindow", L"Send Command", 
        WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 
        100, 100, 600, 400, 
        NULL, 
        (HMENU)4, 
        (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL); 
    break; 
} 

+0

'GetWindowLong'은 64 비트 OS와 호환되지 않습니다. 대신에 32 비트 및 64 비트 코드 모두에 사용할 수있는 ['GetWindowLongPtr'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633585.aspx)를 사용하십시오. – IInspectable

답변

1

hMenu 매개 변수로 (HMENU)4을에 전달하십시오.3210은 최상위 창을 작성하여 시스템에 메뉴를 첨부하도록 지시합니다. 이 메뉴에는 메뉴 핸들 4가 있습니다. CreateMenu과 같은 기능에서 메뉴 핸들 (HMENU)이 반환됩니다. 핸들이 유효한 HMENU이 아니면 창을 만들지 못합니다.

귀하의 관찰 창 창 실제로 존재한다는 믿음에 자신을 오해의 소지가 표시되지 않습니다. 해당 창은 존재하지 않으며 CreateWindowExNULL을 반환합니다. 반환 값을 확인하는 것이 좋습니다. API 호출이 실패 할 때 GetLastError을 호출하면 대개 도움이됩니다.

+0

괜찮습니다. 하지만 난 그들의 컨트롤 ID (hMenu)에 의해 다른 컨트롤 핸들러에 액세스 할 수 있도록 hMenu 매개 변수를 사용하고, 난 정말 내 창에서 메뉴가 필요하지 않습니다, 그리고 빈 메뉴는 허용되지 않습니다. 어떤 해결책? – user2367115

+2

@user'hMenu' 매개 변수는 오버로드 된 의미를 가지고 있습니다 : ** 최상위 레벨 ** 창을 생성하면 메뉴 리소스의 ID를 지정합니다. ** 자식 창을 만들면 ** 컨트롤의 ID입니다. 자식 윈도우는 'WS_CHILD' 윈도우 스타일을 가진 윈도우이고 최상위 윈도우는 그렇지 않습니다. 제어 ID는 동일한 상위를 공유하는 여러 하위 창을 구별하기 위해 지정됩니다. 이러한 이유로 최상위 레벨 윈도우에 컨트롤 ID를 할당하는 것은 의미가 없습니다. 최상위 창은 'HWND'로 식별 할 수 있습니다. – IInspectable

+0

좋아, 지금은 창문을 만들지 못하게하는 몇 가지 문제가있다. 최상위 창을 자식과 팝업 창으로 만들 필요가 있지만, microsoft reference에 따르면 WS_CHILD와 WS_POPUP을 사용한다. 허용되지 않습니다. 어떻게해야합니까? – user2367115

관련 문제