首先请原谅我,但我是全新的。当我点击屏幕时,我正在尝试编写一个识别我的组合框选择的程序(我选择了我要放置的项目)。但是我不能,因为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;
}
}
我做错了什么?
答案 0 :(得分:2)
HWND g_Combobox = CreateWindowEx(...
替换为:
g_Combobox = CreateWindowEx(...
您当前的代码填充局部变量,保持全局变量不变。这就是SendMessage
处理全局变量会产生意外结果的原因。
将来要解决这类问题:
使用调试器。
使用最大可用编译器警告级别。