开发环境是VC 7.1
我在对话框当中放置了一个Static Text控件,然后对其建立变量,变量类型是一个我从CStatic集成的类,这个类主要功能是显示URL。
但是在OnInitDialog当中这个控件的窗口句柄竟然还没有建立起来,不知道为什么?
我测试了即使我把变量类型改为CStatic,在OnInitDialog当中还是没有建立起来。
似乎是我的Static控件和对象没有关联起来,有高手知道原因吗,谢谢。

解决方案 »

  1.   

    你是在CDialog::OnInitDialog()语句之间还是之后去获取CStatic窗口句柄?
    之前的话是获取不到CStatic窗口句柄的。
      

  2.   

    就在OnInitDialog函数内部去获取句柄的,我觉得这里这里应该可以得到的,因为我参考其他的例程当中都是这么写的。ID改什么?不明白你的意思,需要修改吗?
      

  3.   

    难道你的静态标签的ID还是IDC_STATIC么?需要换个ID号。IDC_STATIC是缺省的,固定为1
      

  4.   

    DoDataExchange(CDataExchange* pDX) 这个函数中的关联  对否??
    DDX_Control()~~~
      

  5.   

    如果使用默认的IDC_STATIC,在ClassWizard中是看不到的
      

  6.   

    静态控件的ID默认为IDC_STATIC
    需要改变ID,才能关联变量
      

  7.   

    ID已经修改了,不是默认的IDC_STATIC。>>DoDataExchange(CDataExchange* pDX) 这个函数中的关联  对否??
    >>DDX_Control()~~~
    这两个函数也看了,没有问题。我觉得是VC当中的某个文件(不是源文件)会指明我的控件和对象的关系,然后在编译的时候VC编译器会进行一些处理。可能就是这个关系现在没有了。
      

  8.   

    通过GetDlgItem可以获取到窗口的句柄,但是通过对象就是无法获取窗口句柄,看来就是关联上出现了问题。
      

  9.   

    看一下你对话框初始化的代码。
    你用GetDlgItem(IDC_***)看一下是否有对象可获得。
    你这个关联变量是如何添加的?classwizard?
      

  10.   

    VC7.1 没有Classwizard,就是通过右键菜单添加的变量
      

  11.   

    DDX_Control()~~~ 这段咋写的?
    无非就是个映射问题。咋搞得这么麻烦呢。
      

  12.   

    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    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来建立控件,那么控件和对象的关系实质上应该是在某个文件当中指明了,不知道这样理解是否正确。
      

  13.   

    DDX_Control(pDX, IDC_HYPERLINK, m_cLink); 
    ::IsWindow(m_bjcaLink.GetSafeHwnd())返回false。 
    ====
    别再告诉我笔误,今天听得太多了。
    不是同一个控件啊。一个是m_cLink,一个是m_bjcaLink,啥意思?
      

  14.   

    这是我整个头文件的代码:#ifndef ABOUT_DLG_H
    #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
      

  15.   

    你的头文件中为什么不是类似:
     // Dialog Data
      //{{AFX_DATA(cMUSetAttributesDialogListDialog)
      enum { IDD = IDD_MU_ATTR_LIST };
      CListBox  m_chosenValues;
      CListBox  m_possibleValues;
      //}}AFX_DATA
    这样的变量定义方式呢?到哪里去了?
      

  16.   

    我这个工程是Acrobat的一个插件,Acrobat提供的工程向导生成的文件就是这样,没有那些注释。