224上位机VC MFC修改指定程序按钮编辑等控件的文本
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;
- }
复制代码我们来演示下功能实现的整个过程
|