捕捉ON_CBN_SELCHANGE和扩展的CFileDialog当其他下拉事件

我试图创建一个使用C ++ / VS2008自定义文件保存对话框为XP。 我的对话框将有三个下拉列表和编辑框。 我需要的下拉列表中的内容时,选择被其他下拉菜单作出动态更新。 因此,我需要赶上CBN_事件。

我创建了扩展CFileDialog的和扩展CComboBox类的类。 我可以在自定义对话框(与组合)来显示,但我不能捕获CBN_事件。

我用VS“创建MFC DLL”向导获得两个类:应用程序类和自定义文件保存对话框类。 我创建了一个派生CComboBox类,所以我可以添加邮件/事件陷印代码。 我把消息映射,DoDataExchange中和事件捕捉代码中的对话框类。

下面的代码是什么我正在使用的删节版。 我想我不需要发布创建三个下拉菜单的时候我不能连一个下拉工作。 我也没有把任何代码的编辑框,因为我没有用的问题。

一些代码:从应用程序类 - 创建自定义对话框的一个实例,调用DoModal的:

BOOL CSaveAsApp::InitInstance() { CWinApp::InitInstance(); // Parse the command line to get the defaultExtension and the file filter CString cmdLineAsString = CString( theApp.m_lpCmdLine ); int curPos = 0 ; CString fileExtension = cmdLineAsString.Tokenize(" ", curPos ) ; CString fileFilter = cmdLineAsString.Tokenize(" ", curPos ) ; ; MyFileDialog dlg( FALSE, fileExtension.GetBuffer(), "Enter File Name Here", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, fileFilter.GetBuffer(), m_pMainWnd) ; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { ... } else if (nResponse == IDCANCEL) ... return FALSE; }

下面是从自定义文件保存对话框的一些代码:

IMPLEMENT_DYNAMIC(MyFileDialog, CFileDialog ) // LJM Put in last two parms: DWORD dwSize, BOOL bVistaStyle (0, 0 ) // bVistaStyle = 0 ==> XP-Style dialog MyFileDialog::MyFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) : CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd, 0, 0) { } MyFileDialog::~MyFileDialog() { } void MyFileDialog::DoDataExchange(CDataExchange* pDX) { CFileDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(MyFileDialog) //DDX_Control(pDX, IDC_CONTEXT_COMBO, m_ComboContext); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(MyFileDialog, CFileDialog) ON_CBN_SELCHANGE(IDC_CONTEXT_COMBO, &MyFileDialog::OnCbnSelchangeUniqueNumber) ON_CBN_SELENDOK(IDC_CONTEXT_COMBO, &MyFileDialog::OnCbnSelchangeUniqueNumber) END_MESSAGE_MAP() BOOL MyFileDialog::OnInitDialog() { CFileDialog::OnInitDialog(); //AfxEnableControlContainer(); const UINT iExtraSize = 300; // Get a pointer to the original dialog box. CWnd *wndDlg = GetParent(); RECT Rect; wndDlg->GetWindowRect(&Rect); // Change the size of FileOpen dialog wndDlg->SetWindowPos(NULL, 0, 0, Rect.right - Rect.left, Rect.bottom - Rect.top + iExtraSize, SWP_NOMOVE); CWnd *wndComboCtrl = wndDlg->GetDlgItem(cmb1); wndComboCtrl->GetWindowRect(&Rect); wndDlg->ScreenToClient(&Rect); // Remember it is child controls Rect.top += 60; Rect.bottom += 120; Rect.left += 50; m_ComboContext.Create(WS_CHILD | WS_VISIBLE | CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP, Rect, wndDlg, IDC_CONTEXT_COMBO); m_ComboContext.SetFont(wndComboCtrl->GetFont(), TRUE); m_ComboContext.AddString(_T("Lou1") ); m_ComboContext.AddString(_T("L432") ); m_ComboContext.AddString(_T("Lou2") ); m_ComboContext.AddString(_T("Lou3") ); return true ; } void MyFileDialog::OnCbnSelchangeUniqueNumber() { AfxMessageBox( _T("OnCbnSelchangeUniqueNumber"), 0, 0 ) ; }

下面是从CComboBox派生类:

IMPLEMENT_DYNAMIC(LouComboBox, CComboBox) LouComboBox::LouComboBox() { } LouComboBox::~LouComboBox() { } BEGIN_MESSAGE_MAP(LouComboBox, CComboBox) ON_CONTROL_REFLECT(CBN_SELCHANGE, &LouComboBox::OnCbnSelchange) ON_CONTROL_REFLECT(CBN_KILLFOCUS, &LouComboBox::OnCbnKillfocus) ON_CONTROL_REFLECT(CBN_SELENDCANCEL, &LouComboBox::OnCbnSelendcancel) ON_CBN_SELCHANGE(IDC_CONTEXT_COMBO, &LouComboBox::OnCbnSelchangeUniqueNumber) END_MESSAGE_MAP() void LouComboBox::OnCbnSelchange() { // TODO: Add your control notification handler code here AfxMessageBox( _T("Menu selected"), 0, 0 ) ; } void LouComboBox::OnCbnKillfocus() { // TODO: Add your control notification handler code here AfxMessageBox( _T("Lost focus"), 0, 0 ) ; } void LouComboBox::OnCbnSelendcancel() { AfxMessageBox( _T("OnCbnSelendcancel"), 0, 0 ) ; } void LouComboBox::OnCbnSelchangeUniqueNumber() { // TODO: Add your control notification handler code here AfxMessageBox( _T("OnCbnSelchangeUniqueNumber"), 0, 0 ) ; }

我已经试过版本,其中的对话框类有messagemap / DoDataExchange中,组合框类有他们,这两个类有他们..

我能赶上一些事件 - 没有与CComboBox,虽然。 我可以在对话框回应ON_NOTIFY,ON_WM_DESTROY和编辑框响应ON_WM_KILLFOCUS。

我有这个唠叨认为这是一个前额搭接,我是太接近这一点,并不能看到明显。

任何帮助,协助,方向将不胜感激。

--------------解决方案-------------

您需要提供一个钩子程序的对话框捕捉信息。 细节在这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646931%28v=vs.85%29.aspx

分类:事件 时间:2015-03-15 人气:0
本文关键词: MFC,事件,组合框
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.496 (s). 10 q(s)