这个函数相信大家很熟悉,因为经常用,MSDN中说它返回的值可能是临时的,不能保存起来供以后使用,但是这个以后会是什么时候呢?
    以前有人告诉我,以后指退出函数,也就是说GetDlgItem返回值可以保存起来使用,但限定在同一函数之内!可是前不久我遇到过几次,在同一函数中,保存GetDlgItem的返回值使用也出了错。那么我的问题就出来了,如果GetDlgItem函数的返回值在同一函数中都不能保证始终有效,那么又怎么能保证类似于这样的程序的正确性呢:
    GetDlgItem(IDC_XXXX)->SetWindowText("xyz");
    因为GetDlgItem返回值可能在调用SetWindowText函数之前就已经无效了!    高手们怎么看待这个问题,如果要给一个按钮改变文字怎么办?    还有,退一万步来说,假设GetDlgItem(IDC_XXXX)->SetWindowText("xyz");能够正确执行,如果我要使一个无效的按钮有效;还有改变一下它的文字;还要让他得到焦点;还要设置他为默认按钮。这样岂不要写一堆GetDlgItem(IDC_XXXX)语句了!?

解决方案 »

  1.   

    这样岂不要写一堆GetDlgItem(IDC_XXXX)语句了!?
    ----------------------------------------------
    CButton *pbutton = (CButton *)GetDlgItem(IDC_BUTTON);
    pbutton->EnableWindow(TRUE);//有效
    pbutton->SetWindowText("Ok");//改文字
    pbutton->.......//可以这样用
      

  2.   

    可是如果取出后,在使用之前它变了怎么办?也就是说微软也不能决对的保证
    GetDlgItem(IDC_XXXX)->SetWindowText("xyz");语句能正确执行!这似乎是mfc的机制问题,是用指针机制代替API的句柄机制带来的几乎无解的问题,但可能一个程序员一辈子也遇不到一次罢了。