我要设置某个对话框里的某个按键的状态,这么写老是不对,为什么?

来源:百度知道 编辑:UC知道 时间:2024/06/17 07:12:17
我要设置某个对话框里的某个按键的状态,这么写老是不对,为什么?

CButton *p = (CButton*)GetDlgItem(hwnd1, IDC_BUTTON1);
p->SetState(TRUE);

hwnd1是在对话框初始化里用hwnd1 = GetSafeHwnd()获得的。

编译都能通过,就是一运行就报内存使用错误。
===========================================
GetDlgItem不是在对话框类里用的,应该不是MFC函数,所以要两个参数,我是菜鸟阿,这两句话也是网上抄来的

不过按照silvergingko说的 CButton* p = CButton::FromHandle(GetDlgItem(hwnd1, IDC_BUTTON1));
我试过的,这句话编译不过去的,报错:
error C2440: 'initializing' : cannot convert from 'CWnd *' to 'CButton *'

To何志丹:
p指针不是空的,我看过的。

==========================================
好了,我现在改成:
CWnd * p = CButton::FromHandle(GetDlgItem(hwnd1, IDC_BUTTON1));
((CButton *)p)->SetState(TRUE);

一切正常了,非常感谢各位!!!

这么明显的问题,都没人提出么?

GetDlgItem(hwnd1, IDC_BUTTON1);
两个参数的话就是个WIN32的API,WIN32不可能返回一个MFC类指针的(CButton*)。WIN32 API调用后返回的是按钮句柄。

要么:
CButton* p = (CButton*)GetDlgItem(IDC_BUTTON1);//MFC函数

要么:
CButton* p = CButton::FromHandle(GetDlgItem(hwnd1, IDC_BUTTON1));//先是WIN32 API,再是MFC函数,两次调用

我按你说的试了下没错,应该是你别的地方错了。
而且在CWnd类中已经包含有本窗体句柄:
public :
m_hWnd;
要用的时候直接拿来就行。和用GetSafeHandle取得的句柄是一样的。
楼主估计用的是windows API的::GetDlgItem.如果没加::编译根本就通不过。不是这个问题。

不用第一个参数.

在对话框类中.getdlgitem直接是成员函数,,不用传句柄
代码如下:
CButton *pButton =(CButton * )GetDlgItem(IDC_BUTTON1);
pButton->setstate(TRUE);

看看p指明针是不是空

如果不是,请将代码上传到何丹的论坛

URL,见我的用户资料