2017-07-27 18 views
0

Ich versuche, ein Combobox-Fenster anzuzeigen, wie Sie sehen können Ich setze hWndComboBox als mein zweites Fenster und ich verwende ShowWindow() Funktion und es zeigt wirklich nichts, wenn ich den Code kompilieren und ausführen? Was sollte ich mehr hinzufügen?Comboboxen in Windows API-Programmierung

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstace, LPSTR lpCommand, int nCmdLine) 
{ 
    HWND window; 
    int xpos = 100;   // Horizontal position of the window. 
    int ypos = 100;   // Vertical position of the window. 
    int nwidth = 200;   // Width of the window 
    int nheight = 200;   // Height of the window 
    HWND hwndParent = window; // Handle to the parent window 


    MSG message; 
    WNDCLASSEX wndClass; 

    wndClass.cbSize = sizeof(WNDCLASSEX); 
    wndClass.cbClsExtra = 0; 
    wndClass.cbWndExtra = 0; 
    wndClass.style = 0; 
    wndClass.hInstance = hInstance; 
    wndClass.lpfnWndProc = wndCll; 
    wndClass.lpszClassName = classNoOne; 
    wndClass.lpszMenuName = MAKEINTRESOURCE(IDR_MYMENU); 
    wndClass.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_PENGUIN_ICON)); 
    wndClass.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_PENGUIN_ICON), IMAGE_ICON, LR_DEFAULTSIZE, LR_DEFAULTSIZE, 0); 
    wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); 
    wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW-1); 

    if(!RegisterClassEx(&wndClass)){ 
     printf("No wndclass"); 
    } 
    window = CreateWindowEx(WS_EX_CLIENTEDGE, classNoOne, "Start Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1000, 500, NULL, NULL, hInstance, NULL); 
     //create the window 
    HWND hWndComboBox = CreateWindow(WC_COMBOBOX, "name of the combobox", CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | WS_OVERLAPPED | WS_VISIBLE , xpos, ypos, nwidth, nheight, hwndParent, NULL, hInstance, NULL); 
    TCHAR Planets[9][10] = { 
     TEXT("MERCURY"), TEXT("VENUS"), TEXT("Terra"), TEXT("MARS"), TEXT("JUPITER"), TEXT("SATURN"), TEXT("URANUS"), TEXT("NEPTUNE"), TEXT("PLUTO") 
    }; 
    //these are the list elements 
    TCHAR A[16]; 
    int k = 0; 
    memset(&A, 0, sizeof(A)); 
    //allocate memory 
    for(k = 0; k<=8; k+=1){ 
    strcpy(A, (TCHAR *)Planets[k]); 
     SendMessage(hWndComboBox,(UINT) CB_ADDSTRING,(WPARAM) 0,(LPARAM) A); 
    } 
    SendMessage(hWndComboBox, CB_SETCURSEL, (WPARAM)2, (LPARAM)0); 
    ShowWindow(hWndComboBox, nCmdLine); 
    //ShowWindow(window, nCmdLine); 
    if(window == NULL){ 
     printf("window is NULL"); 
    } 

    while(GetMessage(&message, NULL, 0, 0) > 0){ 
      if(!IsDialogMessage(dialogSmall, &message)){ 
       TranslateMessage(&message); 
       DispatchMessage(&message); 
      } 
    } 
    return message.wParam; 
} 
+0

"zeigt wirklich nichts"? Was zeigt es? – pm100

+0

aber hauptsächlich, warum schreiben Sie eine Windows GUI App in C. Es ist eine schreckliche Wahl – pm100

+0

nur die Konsole erscheint, warum ist es eine schreckliche Wahl? Ich kann Fenster und Dialogfelder mit C erstellen, aber da ich neu bin habe ich Probleme mit der Combobox –

Antwort

1

Programmiersprachen arbeiten nicht wie Mathematik. In der Mathematik kann man sagen x = y; und dann sage y = 5; und dann können Sie das x ableiten müssen 5.

In Programmiersprachen aber sein, wenn Sie sagen, HWND hwndParent = window; dann hwndParent den Wert annimmt, dass window hatte zur Zeit der Zuordnung, wenn Sie also später tatsächlich window initialisieren mit window = ... können Sie nicht erwarten, dass der Wert hwndParent plötzlich bedeutungsvoll wird. Es wird nicht initialisiert bleiben, da window zum Zeitpunkt des Auftrags nicht initialisiert wurde.

Hinweis: Wenn Sie HWND hwndParent = window; tun konnten, wenn window nicht initialisiert wurde, bedeutet dies, dass Sie keine Warnung erhalten haben. Das bedeutet wiederum, dass Sie Ihren Compiler nicht so konfiguriert haben, dass er Warnungen ausgibt, wenn Sie solche Dinge tun. Versuchen Sie nicht, ohne Warnungen zu programmieren. Sie werden nie so viel erreichen.

+0

Ich habe die Anweisung 'HWND hwndParent = window;' unter der Funktion 'CreateWindowEx()' gesetzt, ich kann immer noch kein Fenster sehen, ich glaube, ich habe Probleme mit der Syntax –

Verwandte Themen