错误提示是说函数不能接受两个参数。这是因为命名控件造成的。MFC中很多函数名跟SDK里的都是重复的。如果你在MFC中要用API那么建议养成良好习惯在函数前面加:: 也就是改为"::GetDlgItemText(xxx,xxx)"对于第一个句柄参数你可以用this指针。::GetDlgItemText(this->m_hWnd,xxx,xxx,xxx)第二个参数是控件ID,第三个是接受的字符的缓存指针,第四个是最大接受几个字符的个数;如果你省略了"::"那么默认是使用的 MFC的CWnd类的方法。可以这样调用:CString str;this->GetDlgItemText(IDC_TEXT,str); 补充: 完蛋了,现在才发现原来已经回答了好几个你的相关问题,不知道会不会被举报刷分。 追问: 不好意思,还是不行。说明下:我把上面的GetDlgItemText和SetDlgItemText函数写在线程里了。为什么不行呢?还是有错误提示!谢谢! 回答: 错误提示是什么你也不贴上来 不过我已经大致猜出来了 既然你是写在线程函数里 那么错误提示 应该是说this不是静态变量什么的。当然啊,线程函数是不能使用类的成员的。解决方法有两个第一:定义一个全局变量保存窗口句柄,在线程函数里用全局变量。第二:把类的指针当做参数传递给线程函数。你创建线程的时候 CreateThread(NULL,0,NULL,this,0,NULL);线程处理函数:DWORD WINAPI ThreadPro(LPVOID lpvoid){ xxxxxx p = (xxxxxx )lpvoid;//关键就是这句代码了,把传进来的参数转换成类指针。"XXXXXX"是你的类名。
CWnd pWnd=CWnd::FindWindow(NULL,_T("EightPuzzle"));//获取目标窗口
pWnd->SendMessage(/消息的代号/,NULL,0);//发送消息
对话框属性->样式,勾上最大化框。
再在类向导里,选择WM_SIZE,然后Edit Code
VC++全屏时,根据对话框大小调整控件大小
1、在对话框类中加入成员变量CRect m_rect;用于保存对话框大小变化前的大小;
2、在对话框的OnInitDialog()函数中获取对话框创建时的大小:GetClientRect(&m_rect);
3、在WM_SIZE的响应函数OnSize()中加入以下代码:
C/C++ code
CWnd pWnd;
pWnd = GetDlgItem(IDC_LIST); //获取控件句柄
if(pWnd && nType!=1)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rect; //获取控件变化前大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
// cx/m_rectWidth()为对话框在横向的变化比例
rectleft=rectleftcx/m_rectWidth();/////调整控件大小
rectright=rectrightcx/m_rectWidth();
recttop=recttopcy/m_rectHeight();
rectbottom=rectbottomcy/m_rectHeight();
pWnd->MoveWindow(rect);//设置控件大小
}
GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小
看看你身后的质疑,使用ATL。
HWND HWND函数GetDlgItem(IDC_LIST)在,
CListCtrl的LC(HWND); / /或者使用附加要求。
在手柄上一般使用ATL,MFC类指针一般。
例如,函数GetDlgItem返回HWND,ATL,MFC返回的CWnd
看了你后面的追问,用到了ATL。
HWND hWnd = GetDlgItem(IDC_LIST);
CListCtrl lc(hWnd); //或者用Attach也行。
ATL中一般使用句柄,MFC中一般是类指针。
比如GetDlgItem,ATL返回HWND,MFC返回CWnd
void SystemDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
if(nType==1) return; //最小化则什么都不做
CWnd pWnd;
pWnd = GetDlgItem(Btn); //获取控件句柄
ChangeSize(pWnd,cx,cy); //调用changesize()函数
GetClientRect(&m_rect); //将变化后的对话框设置为旧大小
Invalidate();//声明无效区域
UpdateWindow();//立即更新程序
}
void SystemDlg::ChangeSize(CWnd pWnd, int cx, int cy)
{
if (pWnd)
{
CRect rect;
pWnd->GetWindowRect(&rect); //获取控件变化前的大小
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
rectleft=rectleftcx/m_rectWidth();//调整控件大小 ,cx/m_rectWidth()为对话框在横向的变化比例
rectright=rectrightcx/m_rectWidth(); //cx存储的是变化后的宽度,cy存储的是变化后的高度
recttop=recttopcy/m_rectHeight(); //m_rectheight()表示的是变化前主窗体的高度
rectbottom=rectbottomcy/m_rectHeight();
pWnd->MoveWindow(rect);//设置控件大小
}
}
以上就是关于MFC获取控件文本和显示控件文本谢谢~~全部的内容,包括:MFC获取控件文本和显示控件文本谢谢~~、MFC 怎么在线程中获取当前子窗口的句柄(应用:基本对话框)、MFC如何将窗口中所有控件大小随父窗口大小改变等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)