动态创建CComboBox控件的问题

carerizjh 2009-11-04 05:52:19
写了下面这个测试函数,想动态的在一个对话框上创建CComboBox控件,可是运行之后控件没有显示出来,
请高手指教,哪里有问题。

创建控件的函数
BOOL CTestCtrlMsgDlg::AddCtrl(UINT mCtrlID, CRect rect)
{
CComboBox mCtrlCombox;

BOOL RST = mCtrlCombox.CreateEx( NULL,_T("ComboBox"), NULL,
WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST|WS_TABSTOP,
rect,this, mCtrlID );

if( RST )
{
mCtrlCombox.AddString( _T("Item 1") );
mCtrlCombox.AddString( _T("Item 2") );
mCtrlCombox.AddString( _T("Item 3") );
mCtrlCombox.AddString( _T("Item 4") );
}

mCtrlCombox.ShowWindow(SW_SHOW);

return RST;
}

我是在DLG工程的自带OnInitDialog函数中调用的,调用部分如下:
CRect rect;
rect.left = 5;
rect.right = 200;
rect.top= 5;
rect.bottom = 300;

BOOL rst = AddCtrl( 20001, rect );

先行谢过,另:我想给这个动态创建的下拉控件添加一个对CBN_SELCHANGE消息的响应,不知道该怎么添加。
...全文
320 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
carerizjh 2009-11-06
  • 打赏
  • 举报
回复
多谢6喽 :)
mmilmf 2009-11-05
  • 打赏
  • 举报
回复
ON_CBN_SELCHANGE(20001, OnSelchangeComboType)需要手动添加这条消息,就像自定义的消息。
看一下
WM_COMMAND
wNotifyCode = HIWORD(wParam); // notification code
wID = LOWORD(wParam); // item, control, or accelerator identifier
hwndCtl = (HWND) lParam; // handle of control

红色部分可以获取你的ID号
carerizjh 2009-11-04
  • 打赏
  • 举报
回复
我自己解决了 用OnCommand的函数截获的,用OnNotify反而不行

不知道原因,谁能解释一下。。。。
carerizjh 2009-11-04
  • 打赏
  • 举报
回复
刚才在网上查了一下,想用OnNotify函数来捕获控件的消息,但是单步根本进不来,不知道什么原因

BOOL CTestCtrlMsgDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
{
// TODO: Add your specialized code here and/or call the base class
NMHDR* pnmh = (NMHDR*)lParam;
TRACE( "The value of pnmh->idFrom is %d\n", pnmh->idFrom );
TRACE( "The value of wParam is %d\n", wParam );
TRACE( "The value of lParam is %d\n", lParam );

if( pnmh->idFrom == 20001 ) //根据ID判断是不是自建控件发出的消息
{
if( pnmh->code == CBN_SELCHANGE )
{
TRACE0("yes it is\n");
return TRUE;
}
}

return CDialog::OnNotify(wParam, lParam, pResult);
}
carerizjh 2009-11-04
  • 打赏
  • 举报
回复
多谢2楼,创建的问题已经解决了。
不过我说的消息响应,并不能预先知道控件的ID,能不能动态的捕获呢?
mmilmf 2009-11-04
  • 打赏
  • 举报
回复
CComboBox mCtrlCombox; 改为全局变量。
ON_CBN_SELCHANGE(20001, OnSelchangeComboType)
carerizjh 2009-11-04
  • 打赏
  • 举报
回复
求助啊求助啊
请大虾帮忙
第7章 Windows标准控件 精讲 在前一章,已经学习了在一个对话框中增加控件,用户通过对话框中的控件与应用程序进行交互的方法,在这一章,主要详细讨论不同Windows标准控件的使用特性,你将学会静态控件、按钮控件、编辑框控件、列表框控件、组合框控件、滚动条控件的使用。 7.1 Windows标准控件概述 7.1.1 Winodws 标准控件 Windows系统提供的标准控件主要包括:静态控件、按钮控件、编辑框控件、列表框控件、组合框控件等,如表7-1所示。 表7-1 windows标准控件的类型 类别 MFC类 控件类型 静态控件 CStatic Static Text、Group Box 按钮控件 CButton Button、Check Box、Radio Button 编辑框控件 CEdit Edit Control 组合框控件 CComboBox Combo Box 列表框控件 CListBox List Box 控件操作的学习要关注以下几个方面: 1. 控件的创建 控件的创建形式分为静态创建和动态创建两种方式。 静态创建是指在对话框模板创建控件,并设置控件的属性,这样,在调用该对话框时,窗口系统会自动按预先的设置为对话框创建控件,程序员可以使用ClassWizard为该控件在对话框类中创建一个控件类的对象。 动态创建是指在程序的运行中根据需要,定义一个控件类的对象,再通过窗口函数CreateWindow()或CreateWindowEx()创建控件,函数ShowWindow()显示控件,正如操作一个子窗口。 2. 控件的属性设置 每个控件都有一个属性集,对于静态创建的控件,可以在对话框模板中,打开控件的属性对话框直接设置控件的初始属性。在程序设计过程中,可以通过控件类对象调用方法设置控件的属性。 3. 控件消息类别 表7-1中所列出的控件中,静态控件不发送消息,其它控件对于用户的操作都能发送消息,不同类的控件发送的消息类别是不相同的,可以使用ClassWizard为控件映射各种消息处理函数。 4. 控件对象的常用方法 MFC控件类提供丰富的方法函数,帮助程序员操作控件对象。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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