开发环境是VC 7.1
我在对话框当中放置了一个Static Text控件,然后对其建立变量,变量类型是一个我从CStatic集成的类,这个类主要功能是显示URL。
但是在OnInitDialog当中这个控件的窗口句柄竟然还没有建立起来,不知道为什么?
我测试了即使我把变量类型改为CStatic,在OnInitDialog当中还是没有建立起来。
似乎是我的Static控件和对象没有关联起来,有高手知道原因吗,谢谢。
我在对话框当中放置了一个Static Text控件,然后对其建立变量,变量类型是一个我从CStatic集成的类,这个类主要功能是显示URL。
但是在OnInitDialog当中这个控件的窗口句柄竟然还没有建立起来,不知道为什么?
我测试了即使我把变量类型改为CStatic,在OnInitDialog当中还是没有建立起来。
似乎是我的Static控件和对象没有关联起来,有高手知道原因吗,谢谢。
之前的话是获取不到CStatic窗口句柄的。
DDX_Control()~~~
需要改变ID,才能关联变量
>>DDX_Control()~~~
这两个函数也看了,没有问题。我觉得是VC当中的某个文件(不是源文件)会指明我的控件和对象的关系,然后在编译的时候VC编译器会进行一些处理。可能就是这个关系现在没有了。
你用GetDlgItem(IDC_***)看一下是否有对象可获得。
你这个关联变量是如何添加的?classwizard?
无非就是个映射问题。咋搞得这么麻烦呢。
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_HYPERLINK, m_cLink);
}IDC_HYPERLINK是这个Static控件的ID。
在OnInitDialog当中
::IsWindow(GetDlgItem(IDC_HYPERLINK)->GetSafeHwnd())返回true。::IsWindow(m_bjcaLink.GetSafeHwnd())返回false。
我个人的理解:
控件和对象之间必然有联系,如果没有自己明确定义对象,那么控件对应的对象应该是MFC管理,如果自己定义了那么对象应该是自己管理。
当自己定义对象时,如通过VC6的ClassWizard来建立控件,那么控件和对象的关系实质上应该是在某个文件当中指明了,不知道这样理解是否正确。
::IsWindow(m_bjcaLink.GetSafeHwnd())返回false。
====
别再告诉我笔误,今天听得太多了。
不是同一个控件啊。一个是m_cLink,一个是m_bjcaLink,啥意思?
#define ABOUT_DLG_H#include "stdafx.h"
#include "resource.h"
#include "afxwin.h"
#include "ximage.h"
#include "HyperLink.h"// CAboutDlg 对话框class CAboutDlg : public CDialog
{
DECLARE_DYNAMIC(CAboutDlg)
public:
CAboutDlg(CWnd* pParent = NULL); // 标准构造函数
virtual ~CAboutDlg();// 对话框数据
enum { IDD = IDD_ABOUT };
CStatic m_cLink;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
afx_msg void OnPaint();
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );
afx_msg BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
private:
bool EngraveLogo(CxImage* pLogo);
bool DeltaColor(const RGBQUAD& c0, const RGBQUAD& c1, int delta);
bool DrawLogo(CxImage* pLogo, CxImage* pBackImage);
bool DrawBackImage(CxImage* pBackImage);
bool DrawAboutText();
private://data
CxImage* m_pLogo;
CxImage* m_pBackImage;
CBrush m_brush;
public:
};#endif
// Dialog Data
//{{AFX_DATA(cMUSetAttributesDialogListDialog)
enum { IDD = IDD_MU_ATTR_LIST };
CListBox m_chosenValues;
CListBox m_possibleValues;
//}}AFX_DATA
这样的变量定义方式呢?到哪里去了?