SendMessage(...,CB_GETCURSEL,0,0)总是返回0(Winapi)

时间:2013-09-11 12:25:05

标签: winapi

首先请原谅我,但我是全新的。当我点击屏幕时,我正在尝试编写一个识别我的组合框选择的程序(我选择了我要放置的项目)。但是我不能,因为SendMessage函数总是返回0.我怎样才能得到正确的结果?

HWND g_Combobox;

/* ... */

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    /* ... */

    switch (message)
    {
    case WM_CREATE:
    {
       HWND g_Combobox = CreateWindowEx( WS_EX_CLIENTEDGE, L"COMBOBOX", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER |
            CBS_DROPDOWNLIST, 5, 25, 180, 200, hWnd, (HMENU) ID_MYCOMBO, hInst, NULL );
       SendMessage( g_Combobox, CB_ADDSTRING, 0,( LPARAM ) L"item 1" );
       SendMessage( g_Combobox, CB_ADDSTRING, 0,( LPARAM ) L"item 2" );
       SendMessage( g_Combobox, CB_ADDSTRING, 0,( LPARAM ) L"item 3" );

    /* ... */
    }
        break;
    case WM_LBUTTONDOWN:
    {
             switch (SendMessage(g_Combobox, CB_GETCURSEL, 0, 0))
             {
             case 0: //always picks this one
                 MessageBox( NULL, L"0", L"Oh noes!", MB_ICONEXCLAMATION );
                 break;
             default:
                 MessageBox( NULL, L"something diffrent than 0", L"Yeah...", MB_ICONEXCLAMATION );
                 break;
             }
    }

我做错了什么?

1 个答案:

答案 0 :(得分:2)

HWND g_Combobox = CreateWindowEx(...

替换为:

g_Combobox = CreateWindowEx(...

您当前的代码填充局部变量,保持全局变量不变。这就是SendMessage处理全局变量会产生意外结果的原因。

将来要解决这类问题:

  1. 使用调试器。

  2. 使用最大可用编译器警告级别。