getdlgitem,GetDlgItem报错非静态成员引用必须与特定对象相对

http://www.itjxue.com  2023-01-20 00:52  来源:未知  点击次数: 

visual c++中getdlgitem是什么意思

获取对应id的指针,比如一个edit控件的ID为ID_EDIT,那就可以使用getdlgitem(ID_EDIT)获取这个edit控件的指针,接着再用一个setwindowtext()就可以在对话框中设置内容了。

getdlgitem(id_edit)-setwindowtext(L"111")在edit中输入111

[MFC]使用GetDlgItem出错

你自己都说了

IDC_LIST_MAIN不是这一个对话框的控件

而你却想得到它的指针

当然会出错了

你可以先在主窗口中得到该列表控件的指针,然后通过函数传递给要用到该指针的对话框类

先在主窗口类中添加一个public属性的成员函数:

CListCtrl*

GetListCtrl(UINT

nID),假设主对话框类为CMainDlg:

CListCtrl*

CMainDlg::GetListCtrl(UINT

nID)

{

return

(CListCtrl*)GetDlgItem(nID);

}

然后在要使用该指针的对话框类的cpp文件中添加对主窗口类CMainDlg.h头文件的包含,然后在事件函数中添加如下代码:

CMainDlg*

pMainDlg=(CMainDlg*)AfxGetMainWnd();

//得到主窗口对象指针

CListCtrl*

pList=pMainDlg-GetListCtrl(IDC_LIST_MAIN);

//调用主窗口成员函数GetListCtrl()

List-InsertItem(0,strtem);

这样就可以了

GetDlgItem的用法

CButton*

btn

=

(CButton*)GetDlgItem(IDC_BUTTON_SEND);

btn-SetWindowTextW(_T("hello"));如果想得到其他对话框中的控件,用GetDlgItem(hwnd,IDD);

CWnd::GetDlgItem(int

nID)

这个是一个类成员函数,可使用CWnd*

pWnd

=

GetDlgItem(ID_XXX);

而HWND

GetDlgItem(

HWND

hDlg,

//

handle

of

dialog

box

int

nIDDlgItem

//

identifier

of

control);

是一个sdk的函数

两个的主要区别是用的地方不一样

一个参数的是在窗口中调用的函数,两个参数的是在平台SDK中调用的

你在对话框类里面调用GetDlgItem(IDC_BOARD_SIZE),就是调用的类成员函数CWnd::GetDlgItem

获得某个控件的句柄GetDlgItem(IDC_BOARD_SIZE)-m_hWnd就可以了

如果要用到第二种用法,要这样

::GetDlgItem(this-

m_hWnd,IDC_BOARD_SIZE);效果一样的

那个IDC_BOARD_SIZE是你某个控件的id,

如果HWND

GetDlgItem(

HWND

hDlg,

//

handle

of

dialog

box

int

nIDDlgItem

//

identifier

of

control);的话,

第一个参数是窗体的句柄,第二个参数是某个控件的ID,和IDC_BOARD_SIZE是一个意思

GetDlgItem(IDC_..),GetDlgItem(HWND

hWnd,

GetDlgItem(IDC_..)是一个非静态方法,意思是你对话框内获取该控件指针,所以这里不需要获取对话框句柄,也就是说你如果在非对话框窗口里面调用这个方法就肯定会出错

GetDlgItem(HWND

hWnd,

IDC_..)是一个静态方法,它是一个让你指定从哪个对话框里获取控件指针

举个例子:你调用了上厕所这个函数,如果你在家里的话肯定是在自己家里上厕所,所以不需要知道在哪里上厕所(hwnd)

如果你在室外那么上厕所就一定要选一个地方(hwnd)。

如果说你上厕所的地方都不是一个房间,那么肯定会报错嘛,因为你在随地大小便,哈哈所以你先搞清楚这两个函数的使用环境区别

(责任编辑:IT教学网)

更多

推荐人物新闻文章