动态创建的一个按钮
CButton* m_pButton;
m_pButton =new CButton;
m_pButton->Create
("Button",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect
(10,10,80,50),this,104)
它的id是104???
GetDlgItem(104)???
我该如何获得它的句柄从而对他进行进一步的操作,比方说更改标题等等。

解决方案 »

  1.   

    m_pButton->GetSafeHwnd();这样可不可以
      

  2.   

    104就是ID,但一定要確定不能與其他控件ID重復
    更改標題可以m_pButton->SetWindowText("Button1");
      

  3.   

    //看看我的方法,利用CreateWindow函数返回的就是窗口句柄,SetWindowLong
    //可以直接使用该句柄
    //创建Microphone按钮
    HWND m_hwndMicButton = CreateWindow(TEXT("button"), TEXT(""),
    WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
    m_ptMicButtonPos.x, m_ptMicButtonPos.y, m_iWidthMicButton, m_iHeightMicButton,
    m_hWnd, (HMENU)ID_MICBUTTON, m_hInst, NULL);
    SetWindowLong(m_hwndMicButton, GWL_USERDATA, (long)this);
      

  4.   

    我要把这几句代码写成函数,其他类可以直接调用我的函数
     CreateButton
            {
              CButton* MyButton;
    MyButton=new CButton;
    MyButton->Create(lpszCaption, dwStyle, rect, this, nID);
             }     调用的时候直接用类名调用这个函数CreateButton(....)这样的话,句柄。?????
      

  5.   

    你的做法是正确的,
    GetDlgItem(104)是可以的。。
    但是104这个值是否已经在resource.h中被其他资源占用了?所以最好你先在resource.h中定义好该ID#define IDC_MYCREATE_BUTTON  200然后再
    m_pButton->Create
    ("Button",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect
    (10,10,80,50),this,IDC_MYCREATE_BUTTON);这样可以避免ID冲突
      

  6.   

    如果直接
    CButton* m_pButton;
    m_pButton =new CButton;
    m_pButton->Create
    ("Button",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect
    (10,10,80,50),this,104)
    然后再进行操作的话,例如GetDlgItem(104)->SetWindowText("Button1");这样就会更改按钮的标题。
    但是像我上面说的现在一个类里面封装了上面几句话,然后调用。
    CMyClass *class=new CMyClass();
    class->CreateButton
    ("Button",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect
    (10,10,80,50),this,104);
    这样的话GetDlgItem(104)->SetWindowText("Button1");就会出错的
      

  7.   

    问题解决了,因为我的对话框也是动态创建的,所以
    class-〉GetDlgItem(104)->SetWindowText("Button1");就可以成功调用,谢谢大家!