Window API 关于控件的消息处理(SendMessage)(转) 收藏
2010-06-22 15:34
399 查看
Window API 关于控件的消息处理(SendMessage)
SendMessage(hwndComboBox, CB_RESETCONTENT, 0, 0 );
SendMessage(hwndComboBox, CB_ADDSTRING, 0, (LPARAM)TEXT("四川"));
SendMessage(hwndComboBox, CB_ADDSTRING, 0, (LPARAM)TEXT("广东"));
SendMessage(hwndComboBox, CB_ADDSTRING, 0, (LPARAM)TEXT("河南"));
//设置组合框和列表框中默认选中的项
SendMessage(hwndComboBox, CB_SETCURSEL, 0, 0);
SendMessage(hwndList, LB_SETCURSEL, 0, 0);
SetFocus(hwndList);
// 改变静态文本控件的显示内容
SendMessage(hwndStatic, WM_SETTEXT, 0, (LPARAM)introduce[0]);
return 0 ;
case WM_COMMAND: // 处理控件通知消息
switch(LOWORD(wParam))
{
case IDC_MYCOMBOX: // 组合框控件的通知消息
switch(HIWORD(wParam))
{
case CBN_SELCHANGE: // 选中的项已经改变
// 获得组合框中选中的项的索引,并重新设置列表框中的项
cbIndex = SendMessage(hwndComboBox, CB_GETCURSEL, 0, 0);
SendMessage(hwndList, LB_RESETCONTENT, 0, 0);
if(cbIndex < 3) // 对于组合框内原有的前三项
{
for(i = 0 ; i < NUM[cbIndex] ; i++)
{
SendMessage(hwndList, LB_ADDSTRING, 0,
(LPARAM)place[cbIndex][i]);
}
}
else // 对于后来用户添加的项
{
SendMessage(hwndList, LB_RESETCONTENT, 0, 0);
SendMessage(hwndList, LB_ADDSTRING, 0,
(LPARAM)TEXT("目前尚未完成"));
// 重新设置静态文本框
SendMessage(hwndStatic, WM_SETTEXT, 0, (LPARAM)TEXT(" "));
}
// 改变静态文本控件的显示内容
SendMessage(hwndList, LB_SETCURSEL, 0, 0);
SendMessage(hwndStatic, WM_SETTEXT, 0,
(LPARAM)introduce[cbIndex]);
break;
case CBN_EDITCHANGE : // 用户改变了组合框中的编辑控件的内容
bChanged = TRUE ; // 设置改动标识
break;
}
break ;
case IDC_MYLIST: // 列表框控件通知消息
switch(HIWORD(wParam))
{
case LBN_DBLCLK: // 双击列表框中的项
// 获取双击的列表项的文本
lbIndex = SendMessage(hwndList, LB_GETCURSEL, 0, 0);
SendMessage(hwndList, LB_GETTEXT, lbIndex, (LPARAM)temp);
wsprintf(buffer, "%s 是一个好地方", temp);
MessageBox(hwnd, buffer, "欢迎光临", MB_OK);
break;
}
break;
case IDC_MYBUTTON: // 按钮控件通知消息
SendMessage(hwnd, WM_CLOSE, wParam, lParam);
break;
case IDC_ADDBUTTON: // 向组合框中添加新项
if(bChanged)
{
// 获取组合框中编辑框部分内的文本
SendMessage(hwndComboBox, WM_GETTEXT, 20 , (LPARAM)temp);
// 将新项添入组合框
SendMessage(hwndComboBox, CB_ADDSTRING, 0, (LPARAM)temp);
SendMessage(hwndComboBox, CB_SETCURSEL, 0, 0);
bChanged = FALSE ;
}
break;
}
return 0 ;
从上可以看到,程序StdControl3没有使用任何资源,相关标识符的值和一些字符数组在头文件StdControl3.h中定义。组合框类型为下拉式组合框,其创建风格为下列值的组合:
WS_CHILD | WS_VISIBLE |WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN
在WM_SIZE消息处理期间,窗口过程设置组合框和列表框的位置和大小,并通过向控件发送消息来初始化组合框和列表框中的选项,如下所示:
SendMessage(hwndComboBox, CB_RESETCONTENT, 0, 0 );
SendMessage(hwndComboBox, CB_ADDSTRING, 0, (LPARAM)TEXT("四川"));
…
SendMessage(hwndComboBox, CB_SETCURSEL, 0, 0);
…
注意:在重新设置组合框或者列表框中的选项时,向它们发送CB_ RESETCONTENT消息非常重要,否则,将会把选项列表重复地添加到组合框或者列表框中。CB_SETCURSEL消息将索引为零的选项设置为默认的选项。
SendMessage(hwndComboBox, CB_RESETCONTENT, 0, 0 );
SendMessage(hwndComboBox, CB_ADDSTRING, 0, (LPARAM)TEXT("四川"));
SendMessage(hwndComboBox, CB_ADDSTRING, 0, (LPARAM)TEXT("广东"));
SendMessage(hwndComboBox, CB_ADDSTRING, 0, (LPARAM)TEXT("河南"));
//设置组合框和列表框中默认选中的项
SendMessage(hwndComboBox, CB_SETCURSEL, 0, 0);
SendMessage(hwndList, LB_SETCURSEL, 0, 0);
SetFocus(hwndList);
// 改变静态文本控件的显示内容
SendMessage(hwndStatic, WM_SETTEXT, 0, (LPARAM)introduce[0]);
return 0 ;
case WM_COMMAND: // 处理控件通知消息
switch(LOWORD(wParam))
{
case IDC_MYCOMBOX: // 组合框控件的通知消息
switch(HIWORD(wParam))
{
case CBN_SELCHANGE: // 选中的项已经改变
// 获得组合框中选中的项的索引,并重新设置列表框中的项
cbIndex = SendMessage(hwndComboBox, CB_GETCURSEL, 0, 0);
SendMessage(hwndList, LB_RESETCONTENT, 0, 0);
if(cbIndex < 3) // 对于组合框内原有的前三项
{
for(i = 0 ; i < NUM[cbIndex] ; i++)
{
SendMessage(hwndList, LB_ADDSTRING, 0,
(LPARAM)place[cbIndex][i]);
}
}
else // 对于后来用户添加的项
{
SendMessage(hwndList, LB_RESETCONTENT, 0, 0);
SendMessage(hwndList, LB_ADDSTRING, 0,
(LPARAM)TEXT("目前尚未完成"));
// 重新设置静态文本框
SendMessage(hwndStatic, WM_SETTEXT, 0, (LPARAM)TEXT(" "));
}
// 改变静态文本控件的显示内容
SendMessage(hwndList, LB_SETCURSEL, 0, 0);
SendMessage(hwndStatic, WM_SETTEXT, 0,
(LPARAM)introduce[cbIndex]);
break;
case CBN_EDITCHANGE : // 用户改变了组合框中的编辑控件的内容
bChanged = TRUE ; // 设置改动标识
break;
}
break ;
case IDC_MYLIST: // 列表框控件通知消息
switch(HIWORD(wParam))
{
case LBN_DBLCLK: // 双击列表框中的项
// 获取双击的列表项的文本
lbIndex = SendMessage(hwndList, LB_GETCURSEL, 0, 0);
SendMessage(hwndList, LB_GETTEXT, lbIndex, (LPARAM)temp);
wsprintf(buffer, "%s 是一个好地方", temp);
MessageBox(hwnd, buffer, "欢迎光临", MB_OK);
break;
}
break;
case IDC_MYBUTTON: // 按钮控件通知消息
SendMessage(hwnd, WM_CLOSE, wParam, lParam);
break;
case IDC_ADDBUTTON: // 向组合框中添加新项
if(bChanged)
{
// 获取组合框中编辑框部分内的文本
SendMessage(hwndComboBox, WM_GETTEXT, 20 , (LPARAM)temp);
// 将新项添入组合框
SendMessage(hwndComboBox, CB_ADDSTRING, 0, (LPARAM)temp);
SendMessage(hwndComboBox, CB_SETCURSEL, 0, 0);
bChanged = FALSE ;
}
break;
}
return 0 ;
从上可以看到,程序StdControl3没有使用任何资源,相关标识符的值和一些字符数组在头文件StdControl3.h中定义。组合框类型为下拉式组合框,其创建风格为下列值的组合:
WS_CHILD | WS_VISIBLE |WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWN
在WM_SIZE消息处理期间,窗口过程设置组合框和列表框的位置和大小,并通过向控件发送消息来初始化组合框和列表框中的选项,如下所示:
SendMessage(hwndComboBox, CB_RESETCONTENT, 0, 0 );
SendMessage(hwndComboBox, CB_ADDSTRING, 0, (LPARAM)TEXT("四川"));
…
SendMessage(hwndComboBox, CB_SETCURSEL, 0, 0);
…
注意:在重新设置组合框或者列表框中的选项时,向它们发送CB_ RESETCONTENT消息非常重要,否则,将会把选项列表重复地添加到组合框或者列表框中。CB_SETCURSEL消息将索引为零的选项设置为默认的选项。
相关文章推荐
- Window API 关于控件的消息处理(SendMessage)
- Window API 关于控件的消息处理(SendMessage)(转)
- Window API 关于控件的消息处理(SendMessage)
- Win32消息处理API---SendMessage
- 介入API中的控件消息处理
- 关于控件子类化(消息处理的一点心得)
- [转]api 编程处理dialogbox的控件消息
- NET控件关于Popup Win控件的使用介绍(消息提示控件)[转]
- OpenFire源码学习之二十三:关于消息的优化处理
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- 可选择的树控件状态改变时的通知消息处理
- Windows 定制控件消息处理函数
- 关于漂亮控件的说明 收藏
- Ios关于推送消息的处理
- [经验总结]SendMessage会等待消息处理结束吗
- CLR FORM接收窗口消息并处理. SendMessage WndProc RegisterWindowMessage
- 关于控件重载WM_PAINT消息
- C#用 SendKyes 结合 Process 或 API FindWindow、SendMessage(PostMessage) 等控制外部程序[转]
- 关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息(对对WM_INITMENUPOPUP消息的处理)
- VS2010/MFC编程入门之八(对话框:为控件添加消息处理函数)