Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI, C++] Funkcje do globalnego HMENU w petli WinProc nie dzialaja

Ostatnio zmodyfikowano 2012-11-29 22:14
Autor Wiadomość
berkov
Temat założony przez niniejszego użytkownika
[WinAPI, C++] Funkcje do globalnego HMENU w petli WinProc nie dzialaja
» 2012-11-29 21:48:09
Hey ho!


Wyglada na to ze choc hMenu jest zdeklarowane globalniea potem wgrane przez:
HMENU hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(900));
w glowym ciele programu (WinMain) to za kazdym razem jak staram sie do menu dostac w petli (WinProc) przez np CheckMenuItem() albo TrackPopupMenu() to hMenu jest PUSTE!

tu dwa przyklady ktore nie dzialaja (tresc z WinProc oczywiscie) :

1:
C/C++
switch( msg )
{
   
case WM_RBUTTONDOWN:
    {
       
        POINT point;
        point.x = LOWORD( lParam );
        point.y = HIWORD( lParam );
        ClientToScreen( hwnd, & point );
       
        if( !GetSubMenu( hMenu, 0 ) ) MessageBox( 0, "NIE DZIALA!!", 0, 0 );
       
        TrackPopupMenu( GetSubMenu( hMenu, 0 ), 0, point.x, point.y, 0, hwnd, NULL );
       
    }
    break;
}



2:
switch( wParam )
{
case 520: //520 to guzik ktory klikam
    {
        MessageBox( 0, "Jestem TU, teraz powinno sie pokazac menu,.. i nic !", 0, 0 );
        g_Checked = ~g_Checked;
        CheckMenuItem( hMenu, 105, MF_BYCOMMAND |( g_Checked ) ? MF_CHECKED
            : MF_UNCHECKED );
       
       
    }
    break;
Jak debugguje to w WinProc hMenu zawsze jest rowne 0x00000000.


Oczywiscie wystarczy ze ponownie wywolam load menu poprzez  hMenu=LoadMenu((HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),MAKEINTRESOURCE(900)); i wtedy wszystko jest w porzadku.. ale z tego co sie orientuje jesli taki load zostal wykonany w glownym ciele (WinMenu) progeamu to nie trzebo ga za kazdym razem juz wywolywac... 

czy ktos wie co robie nie tak?

dzieki
b.
P-70125
berkov
Temat założony przez niniejszego użytkownika
» 2012-11-29 22:14:13
Dziala!


pol dnia nad tym spedzilem a dopeiro jak to tu napisalem to sie zorientowalem w czym jest blad.

Deklaracja bylal globalna a ja ponownie deklarowalem zmienna w winmain.
poprostu usunalem HMENU z przed hMenu i juz wszystko smiga.

Swoja droga dziwne ze kompilator sie nie przyczepil ze deklaruje ponownie ta sama zmienna... ale to juz nie istotne.



sorry i dzieki hhahaha
P-70130
« 1 »
  Strona 1 z 1