2017-07-27 27 views
0

コンボボックスウィンドウを表示しようとしていますが、hWndComboBoxを第2のウィンドウに設定してShowWindow()関数を使用していて、コードをコンパイルして実行しても何も表示されません。何を追加したらいいですか?Windows APIプログラミングのコンボボックス

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

「本当に何も表示されません」それは何を示していますか? – pm100

+0

しかし、主に、なぜWindowsのGUIアプリケーションをC言語で書いていますか?そのひどい選択 – pm100

+0

コンソールだけが表示されます、なぜそれはひどい選択ですか?私はCとウィンドウとダイアログボックスを作成することができますが、私は新しいですので、私はコンボボックスに問題がある –

答えて

1

プログラミング言語は数学のようには機能しません。数学では、x = yと言うことができます。そしてy = 5と言う。あなたがHWND hwndParent = window;を言うとき、あなたはそのxはプログラミング言語5.

でなければなりません推測することができますが、その後、hwndParentwindowが割り当ての瞬間にを持っていたことの値を取るので、あなたは、後で実際にwindowを初期化した場合window = ...とすると、hwndParentの値が突然意味を持つようになることは期待できません。割り当て時にwindowが初期化されていないため、初期化されません。

ヒント:windowが初期化されていないときにHWND hwndParent = window;を実行できた場合は、警告が表示されていないことを意味します。これは、あなたがそのようなことをするときに警告を出すようにコンパイラを設定していないことを意味します。警告なしでプログラムしようとしないでください。あなたはこのように多くを達成することはありません。

+0

'CreateWindowEx()'の関数の下に 'HWND hwndParent = window;'ステートメントを入れましたが、まだウィンドウが見えません。文法に問題があると思います。 –

関連する問題