WTL CComboBox CBN_SELCHANGE消息不响应?

stevenkoh 2013-05-13 05:57:38
今天测试了一下CComboBox控件,但一直测不出来,求教。

要求是CCombox空间中的当前值改变,就触发一个事件让父窗口接管处理(无需再按OK按钮)。我看了下手册使用CBN_SELCHANGE 消息。我简单写了一个测试发现无法响应,不知何故?

编程环境:VC6 WTL7.1

程序就是根据向导生成的范例程序,ATL/WTL AppWizard 程序Dialog Based(Modal Dialog)
然后加了一个ComboBox控件


程序也非常简单:定义:
class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
enum { IDD = IDD_MAINDLG };

BEGIN_MSG_MAP(CMainDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
COMMAND_ID_HANDLER(IDOK, OnOK)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
NOTIFY_HANDLER(IDC_COMBO1, CBN_SELCHANGE, OnComboxChanged) //我添加的
END_MSG_MAP()

// Handler prototypes (uncomment arguments if needed):
// LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
// LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
// LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)

LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnComboxChanged(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/);

CComboBox m_combobox; //我添加的
};



实现:


LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
// center the dialog on the screen
CenterWindow();

// set icons
HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
SetIcon(hIcon, TRUE);
HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
SetIcon(hIconSmall, FALSE);


m_combobox=GetDlgItem(IDC_COMBO1) ;
//m_combobox.SubclassWindow

m_combobox.ResetContent();

CString strTemp;


for(int i=1;i<=100;i++)

{

strTemp.Format("%d",i);

m_combobox.AddString(strTemp);

}

m_combobox.SetCurSel(1);


return TRUE;
}


LRESULT CMainDlg::OnComboxChanged(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)
{
MessageBox("Changed");
return 0;
}


问题是,每见到MessageBox被触发过,不知道栽到那个阴沟里,谢谢指点

...全文
403 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
火星大能猫 2014-07-14
  • 打赏
  • 举报
回复
终于找到解决方法了
stevenkoh 2013-05-14
  • 打赏
  • 举报
回复
CBN_SELCHANGE 不是说是通知吗?怎么成了命令?
stevenkoh 2013-05-13
  • 打赏
  • 举报
回复
谢谢,结贴给分了. 一针见血!
sumos 2013-05-13
  • 打赏
  • 举报
回复
COMMAND_HANDLER(IDC_COMBO_1,CBN_SELCHANGE,OnComboSelChange)

15,980

社区成员

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

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