打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Window API 关于控件的消息处理(SendMessage)(转)
userphoto

2018.04.18

关注

// 在组合框中添加项

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消息将索引为零的选项设置为默认的选项。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
SendMessage函数的常用消息及其应用大全
VC学习日记:对话框控件访问的七种方式
CRichEdit控件操作使用
VC 获取静态文本控件和文本框控件上的文本方法
Windows程序基本结构
基于HOOK和MMF的Windows密码渗透技术
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服