关于清单方块(listbox)类别的 WM_COMMAND消息

selooloo 2011-12-23 11:24:22
今天发现一个奇怪的问题,创建了两个listbox类控件,点击其中一个会产生两个WM_COMMAND消息。

只创建一个listbox类控件时,第一次点击也会产生两个WM_COMMAND消息。如果加入SetFocus的话就正常(一个listbox类控件)

代码如下,无关代码都去掉了:
case WM_CREATE:
hInstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
cxChar=LOWORD(GetDialogBaseUnits());
cyChar=HIWORD(GetDialogBaseUnits());

hwndYear=CreateWindow(TEXT("listbox"),NULL,
WS_CHILD|WS_VISIBLE|LBS_STANDARD,
cxChar,cyChar*3,
cxChar*8,
cyChar*2,
hwnd,(HMENU)ID_YEAR,
hInstance,
NULL);

hwndMonth=CreateWindow(TEXT("listbox"),NULL,
WS_CHILD|WS_VISIBLE|LBS_STANDARD|LBS_SORT,
cxChar,cyChar*10,
cxChar*8+GetSystemMetrics(SM_CXVSCROLL),
cyChar*2,
hwnd,(HMENU)ID_MONTH,
hInstance,
NULL);

return 0;

case WM_COMMAND:

++count;
return 0;


实在想不出什么原因,望高手指点一二
...全文
103 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
selooloo 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yisikaipu 的回复:]
引用 7 楼 selooloo 的回复:焦点变化会产生WM_COMMAND消息吗?

MSDN

An application sends the LBN_KILLFOCUS notification message when a list box loses the keyboard focus. The parent window of the list box receives th……
[/Quote]
谢谢了,终于明白了点,以为失去焦点就产生WM_KILLFOCUS消息呢
yisikaipu 2011-12-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 selooloo 的回复:]焦点变化会产生WM_COMMAND消息吗?[/Quote]

MSDN

An application sends the LBN_KILLFOCUS notification message when a list box loses the keyboard focus. The parent window of the list box receives this notification message through the WM_COMMAND message.

An application sends the LBN_SETFOCUS notification message when a list box receives the keyboard focus. The parent window of the list box receives this notification message through the WM_COMMAND message.
yisikaipu 2011-12-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 selooloo 的回复:]焦点变化会产生WM_COMMAND消息吗?[/Quote]

MSDN

An application sends the LBN_KILLFOCUS notification message when a list box loses the keyboard focus. The parent window of the list box receives this notification message through the WM_COMMAND message.

An application sends the LBN_SETFOCUS notification message when a list box receives the keyboard focus. The parent window of the list box receives this notification message through the WM_COMMAND message.
柯本 2011-12-27
  • 打赏
  • 举报
回复
用spy++跟踪下消息,看看是控件本身问题还是程序问题
selooloo 2011-12-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yisikaipu 的回复:]
引用 5 楼 selooloo 的回复:为什么创建一个listbox时,第一次点击也产生两个WM_COMMAND消息呢

我用下面代码调试,观察output窗口,发现只有一次啊

难道你是设置断点?从应用程序到IDE切换肯定会有焦点变化


C/C++ code
case WM_CREATE:
{
HINS……
[/Quote]
焦点变化会产生WM_COMMAND消息吗?
yisikaipu 2011-12-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 selooloo 的回复:]为什么创建一个listbox时,第一次点击也产生两个WM_COMMAND消息呢[/Quote]

我用下面代码调试,观察output窗口,发现只有一次啊

难道你是设置断点?从应用程序到IDE切换肯定会有焦点变化

		case WM_CREATE:
{
HINSTANCE hInstance=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
int cxChar=LOWORD(GetDialogBaseUnits());
int cyChar=HIWORD(GetDialogBaseUnits());

HWND hwndYear=CreateWindow(TEXT("listbox"),NULL,
WS_CHILD|WS_VISIBLE|LBS_STANDARD,
cxChar,cyChar*3,
cxChar*8,
cyChar*2,
hWnd,(HMENU)ID_YEAR,
hInstance,
NULL);

/*HWND hwndMonth=CreateWindow(TEXT("listbox"),NULL,
WS_CHILD|WS_VISIBLE|LBS_STANDARD|LBS_SORT,
cxChar,cyChar*10,
cxChar*8+GetSystemMetrics(SM_CXVSCROLL),
cyChar*2,
hWnd,(HMENU)ID_MONTH,
hInstance,
NULL);*/

}
break;

case WM_COMMAND:
{
static int count;
++count;

ATLTRACE2("%d\n",count);

if(LBN_KILLFOCUS==HIWORD(wParam) )
;//
else if(LBN_SETFOCUS==HIWORD(wParam) )
;//
}
break;
selooloo 2011-12-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yisikaipu 的回复:]
不奇怪啊,一个获得焦点,另一个就失去焦点,两者都是WM_COMMAND消息


C/C++ code
case WM_COMMAND:
{
static int count;
++count;

if(LBN_KILLFOCUS==HIWORD(wParam) )
……
[/Quote]
为什么创建一个listbox时,第一次点击也产生两个WM_COMMAND消息呢
yisikaipu 2011-12-25
  • 打赏
  • 举报
回复
不奇怪啊,一个获得焦点,另一个就失去焦点,两者都是WM_COMMAND消息

	case WM_COMMAND:
{
static int count;
++count;

if(LBN_KILLFOCUS==HIWORD(wParam) )
;//
else if(LBN_SETFOCUS==HIWORD(wParam) )
;//
}
break;
selooloo 2011-12-25
  • 打赏
  • 举报
回复
回复寥寥啊
CloudmmFly 2011-12-23
  • 打赏
  • 举报
回复
没玩过控件,随便说二句。
1. 鼠标down一个消息,再up又一个消息?
2. 控件放在什么上边?点击控件会不会触发控件底下的对象使其响应?
一叶之舟 2011-12-23
  • 打赏
  • 举报
回复
项一下加点人气

64,660

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧