Anfänger! Benötige Hilfe sichtbar machen von Objekten
-
Hallo erstmal,
ich bin in Sachen Windowsprogrammierung noch ein newbie. Ich habe folgende Frage. Ich habe ein Windowsprogramm geschrieben mit einen Button und einen Listenfeld. Das Listenfeld ich beim start unsichtbar. Bei betätigung des Button soll dann das Listenfeld wieder sichtbar sein. Wie realisiere ich das?
Ich habe das Listenfeld "liste" genannt. Ich dachte das man es über list.visible=true; realisieren kann, aber der Compiler sagt mir immer das auf der linken Seite eine Zeiger sein muss.Kann mir jemand helfen?
Danke im Vorraus!
-
Ehm. In WinAPI? Sicher?
Das würde so gehen:
case IDC_DEINBUTTON: // So frägst Du ja deinen Button auf ein Klick ab, das ganze in WM_COMMAND und wParam. { ShowWindow(GetDlgItem(hWindowHandle, IDC_DEINELISTE), SW_SHOW); // Würde die Liste erscheinen lassen. break; }
Jau...
-
#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; HINSTANCE GlobInst; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { GlobInst = hInstance; static TCHAR szAppName[] = TEXT ("Serials") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { // UNICODE-Compilierung ist die einzige realistische Fehlermöglichkeit MessageBox (NULL, TEXT ("Programm arbeitet mit Unicode und setzt Windows NT voraus!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, // Name der Fensterklasse TEXT ("Seriennummern von Software und Spielen"), // Fenstertitel WS_OVERLAPPEDWINDOW, // Fensterstil CW_USEDEFAULT, // X-Position des Fensters CW_USEDEFAULT, // Y-Position des Fensters 700, // Fensterbreite 500, // Fensterhöhe NULL, // übergeordnetes Fenster NULL, // Menü hInstance, // Programm-Kopiezähler (Programm-ID) NULL) ; // zusätzliche Parameter ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND SoftwareButton, GameButton, Liste; static TCHAR AuswahlLabel[] = TEXT ("Software") ; int cxChar, cyChar; HDC hdc ; PAINTSTRUCT ps ; RECT rect ; cxChar = LOWORD(GetDialogBaseUnits()); cyChar = HIWORD(GetDialogBaseUnits()); switch (message) { case WM_CREATE: SoftwareButton = CreateWindow(TEXT("button"), TEXT("Software"), WS_CHILDWINDOW|WS_VISIBLE, 40, 20, cxChar*20, cyChar*3, hwnd, (HMENU) 1, GlobInst, NULL); GameButton = CreateWindow(TEXT("button"), TEXT("Games"), WS_CHILDWINDOW|WS_VISIBLE, (cxChar*20)+100, 20, cxChar*20, cyChar*3, hwnd, (HMENU) 2, GlobInst, NULL); Liste = CreateWindow(TEXT("listbox"), NULL, WS_CHILD|LBS_STANDARD, 40, 100, cxChar*20+GetSystemMetrics(SM_CXVSCROLL), cyChar*20, hwnd, (HMENU) 3, GlobInst, NULL); //Soll hier noch unsichtbar sein unvisible return 0; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; TextOut(hdc, 2*(cxChar*20)+200, 20+cyChar, AuswahlLabel, lstrlen(AuswahlLabel)); EndPaint (hwnd, &ps) ; return 0 ; case WM_COMMAND: if(LOWORD(wParam)== 1) if(HIWORD(wParam)== BN_CLICKED) { //Wie kann ich hier meine Liste Sichtbar machen? //visible }; return 0; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
Kann mir jetzt jemand erkläre mit welchen Syntax ich beim betätigen des Buttons sichtbar machen kann.
Danke im vorraus
-
Stegi schrieb:
Kann mir jetzt jemand erkläre mit welchen Syntax ich beim betätigen des Buttons sichtbar machen kann.
ChrisK schrieb:
case IDC_DEINBUTTON: // So frägst Du ja deinen Button auf ein Klick ab, das ganze in WM_COMMAND und wParam. { ShowWindow(GetDlgItem(hWindowHandle, IDC_DEINELISTE), SW_SHOW); // Würde die Liste erscheinen lassen. break; }
-
Schreib einfach statt
case WM_COMMAND: if(LOWORD(wParam)== 1) if(HIWORD(wParam)== BN_CLICKED) { //Wie kann ich hier meine Liste Sichtbar machen? //visible };
case WM_COMMAND: { switch(LOWORD(wParam)) { case 2: // So frägst Du ja deinen Button auf ein Klick ab, das ganze in WM_COMMAND und wParam. { ShowWindow(GetDlgItem(hwnd, 3), SW_SHOW); // Würde die Liste erscheinen lassen. break; } break; } break; }
und vor allem lass das ";" nach if, case etc. weg.
-
Danke ChrisK. Jetzt hat es gefunkt!
-
Logo! Wieso auch nicht
Aber ein Tipp: mit (HMENU)3 kannst Du Dir die Elemente nicht so gut "merken". Nachher hast du 2,3,4,5,6,7,8 usw. belegt, und weißt nicht, was nun was ist.
Gehe am besten schnell in die resource.h wenn Du die hast und schreibe da einen neuen Eintrag z.B.:#define IDC_LISTE1 300
und schreibe dann beim erstellen der Liste (HMENU)IDC_LISTE1 rein und so weiter! Ok?