工控编程吧
标题:
224上位机VC MFC修改指定程序按钮编辑等控件的文本
[打印本页]
作者:
qq263946146
时间:
2016-2-26 21:51
标题:
224上位机VC MFC修改指定程序按钮编辑等控件的文本
(, 下载次数: 1)
上传
点击文件名下载附件
224上位机VC MFC修改指定程序按钮编辑等控件的文本
功能展示
有时我们设备工控机上运行的程序需要进行改造,我们得设置其界面按钮,编辑框文本内容,组合框选项等等,我们得自己编写程序更改软件界面来达到我们的目地,当前例程实现指定已打开窗口界面控件的设置功能,效果如图,指定已打开的程序窗口,再指定要设定的窗口内的控件名就可以进行设置;
要点提示
指定窗口的查找可以通过函数EnumWindows()实现,窗口内控件的查找可以通过函数EnumChildWindows()实现;
EnumWindows()函数枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数。回调函数返回FALSE将停止枚举,否则EnumWindows函数继续到所有顶层窗口枚举完为止。 函数原型 BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAMlParam); 参数: lpEnumFunc:指向一个应用程序定义的回调函数指针,请参看EnumWindowsProc。 lPararm:指定一个传递给回调函数的应用程序定义值。
EnumChildWindows()函数原型:
BOOL EnumChildWindows(HWND hWndParent,WNDENUMPROClpEnumFunc, LPARAM lParam);
参数说明:
HWND hWndParent 父窗口句柄
WNDENUMPROC lpEnumFunc 回调函数的地址
LPARAM lParam 自定义的参数
实现功能
1.新建基于对话框的应用程序
2.拖拽一编辑框ID为IDC_EDIT3用于指定已打开程序窗口名,拖拽一编辑框ID为IDC_EDIT1,指定窗口的按钮名(其他控件参考代码设置),拖拽一编辑框ID为IDC_EDIT4,用于设置新名称;
3.拖拽一按钮控件<执行设置>用于设置控件名称
void CGkbc8Dlg::OnSet()
{
GetDlgItemText(IDC_EDIT3,sToFindWndTitle);//获得要查找的窗口标题
GetDlgItemText(IDC_EDIT1,sToFindBtnTitle);//获得要查找的按钮标题
//
CString sBtnName;
GetDlgItemText(IDC_EDIT4,sBtnName);
EnumWindows(EnumWindowsProc,(LPARAM)sBtnName.GetBuffer(0));//遍历已打开的程序窗口名
}
复制代码
4.再在此函数前添加两回调函数及两全局变量
CString sToFindWndTitle;
CString sToFindBtnTitle;
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam );
BOOL CALLBACK EnumChildWindowsProc(HWND hwnd, LPARAMlParam);
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam )
{
CString sWndTitle;
GetWindowText(hwnd,sWndTitle.GetBuffer(0),MAX_PATH);
if (sWndTitle == sToFindWndTitle)//找到指定窗口名后,查找窗口的子窗口
{
EnumChildWindows(hwnd,EnumChildWindowsProc,lParam);//遍历此窗口的全部子窗口
}
return TRUE;
}
BOOL CALLBACK EnumChildWindowsProc(HWND hwnd, LPARAM lParam)
{
/*例程以按钮控件为例,其他控件举一仿三学习*/
CHAR ch[MAX_PATH];
GetClassName(hwnd,ch,MAX_PATH);//获取窗口的类名
CString sClassName(ch);
CString sCtrlName;
if(sClassName=="Button")
{
::SendMessage(hwnd,WM_GETTEXT,100,(LPARAM)sCtrlName.GetBuffer(0));//获取按钮标题
if (sCtrlName == sToFindBtnTitle)//按钮标题为 工控编程吧 时
{
::SendMessage(hwnd,WM_SETTEXT,0,lParam);//设置按钮标题为指定文本
}
}
else if(sClassName=="Static")
{}
else if(sClassName=="ComboBox")
{ }
else if(sClassName=="Edit")
{ }
else if(sClassName=="ListBox")
{ }
else if(sClassName=="RichEdit")
{ }
return TRUE;
}
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/965ef42ef319bfaff193b5ae0c6a7b0b/0/0/w_19rszl2oex.swf-albumId=5376405109-tvId=5376405109-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4