怎样将窗口关联到一个类?

时间:2022-09-29 19:36:33


在资源中添加一个窗口,双击窗口就会弹出“MFC类向导”输入类明后就会创建一个类,从此这个类就与这个窗口“关联”了。

我已有一个窗口,也关联到了一个类,我从其它窗口复制了几个控件过来,双击控件想添加处理函数,这时又弹出“MFC类向导”,这前关联的类它居然不记得了。。。
我怎样手动的设置这种关联???

5 个解决方案

#1


可能是你误改了头文件:

// 对话框数据
enum { IDD = IDD_XXX_DIALOG };

#2


呵呵,自己复制过来的,就需要手动关联下,要么就保存控件,然后重新build下,要不,就删除.ncb和.clw文件,再重新编译下


如果是手动关联
1、申请变量,头文件中的,这个不用说了吧
public:
  CButton m_btn;

protected:
HICON m_hIcon;

// Generated message map functions
//{{AFX_MSG(CTestDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
        afx_msg BOOL  OnDeviceChange(UINT nEventType, DWORD dwData);
afx_msg HCURSOR OnQueryDragIcon();
virtual void OnOK();
afx_msg void OnButton1();//这个地方申明处理函数
afx_msg void OnChangeEdit1();
afx_msg void OnButtonColorbutton();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

2、.cpp文件中

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestDlg)
DDX_Control(pDX, IDC_BUTTON_COLORBUTTON, m_btnColorButton);
DDX_Control(pDX, IDC_EDITFOCUS, m_editFocus);
DDX_Control(pDX, IDC_BUTTON1, m_btn);//关联变量
DDX_Control(pDX, IDC_DATETIMEPICKER1, m_DateTtimeCtrl);
DDX_Text(pDX, IDC_EDITFOCUS, m_dbValue);
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//{{AFX_MSG_MAP(CTestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)//关联处理函数
ON_BN_CLICKED(IDC_BUTTON_COLORBUTTON, OnButtonColorbutton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

写处理函数 
void CTestDlg::OnButton1() 
{
    m_DateTtimeCtrl.SetFocus();
}



#3


我也遇到过, 把原来的类文件从工程删掉,关掉VC ,再打开把文件再添加进去,试试

#4


删掉全部重新来过,呵呵

#5


找到了,是一楼说的enum { IDD = IDD_XXX_DIALOG }; 

我修改了窗口的ID ,而enum {}仍然指向以前的ID,手动改过来就好了

#1


可能是你误改了头文件:

// 对话框数据
enum { IDD = IDD_XXX_DIALOG };

#2


呵呵,自己复制过来的,就需要手动关联下,要么就保存控件,然后重新build下,要不,就删除.ncb和.clw文件,再重新编译下


如果是手动关联
1、申请变量,头文件中的,这个不用说了吧
public:
  CButton m_btn;

protected:
HICON m_hIcon;

// Generated message map functions
//{{AFX_MSG(CTestDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
        afx_msg BOOL  OnDeviceChange(UINT nEventType, DWORD dwData);
afx_msg HCURSOR OnQueryDragIcon();
virtual void OnOK();
afx_msg void OnButton1();//这个地方申明处理函数
afx_msg void OnChangeEdit1();
afx_msg void OnButtonColorbutton();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

2、.cpp文件中

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestDlg)
DDX_Control(pDX, IDC_BUTTON_COLORBUTTON, m_btnColorButton);
DDX_Control(pDX, IDC_EDITFOCUS, m_editFocus);
DDX_Control(pDX, IDC_BUTTON1, m_btn);//关联变量
DDX_Control(pDX, IDC_DATETIMEPICKER1, m_DateTtimeCtrl);
DDX_Text(pDX, IDC_EDITFOCUS, m_dbValue);
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//{{AFX_MSG_MAP(CTestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)//关联处理函数
ON_BN_CLICKED(IDC_BUTTON_COLORBUTTON, OnButtonColorbutton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

写处理函数 
void CTestDlg::OnButton1() 
{
    m_DateTtimeCtrl.SetFocus();
}



#3


我也遇到过, 把原来的类文件从工程删掉,关掉VC ,再打开把文件再添加进去,试试

#4


删掉全部重新来过,呵呵

#5


找到了,是一楼说的enum { IDD = IDD_XXX_DIALOG }; 

我修改了窗口的ID ,而enum {}仍然指向以前的ID,手动改过来就好了