这个人很懒,什么都没有留下
分类: C/C++
2011-05-22 19:43:51
最近工作需要,学了点mfc基础,打算做个对话框界面,做一些按钮调用动态库的功能。然后,就卡在了怎样把结果提示显示在对话框界面的问题。本想用状态栏,但是既然一开始就用了对话框而不是文档,而且暂时真弄不懂怎样在对话框上加上个状态栏,于是,打算用“静态文本”控件来实现,于是……寻找改变静态文本的方法。
没找到方法之前,真是一头雾水,对mfc连个基础都不懂,只会在图上添个框添个按钮然后双击自动建个函数开始写处理的过程,于是,买了本1千多页的mfc字典,看了前面二三十页写了个“hello mfc”(居然山寨“hello world”,sign)。
终于找到了方法, 发现原来如此简单……sign
首先明白一点,不能用默认ID,否则无法添加与控件关联的变量,例如,添加了个静态文本,默认ID是IDC_STATIC,需要改成IDC_STATIC1之类。然后用那个ClassWizard帮忙添加个变量,很随意很方便。
好,改变静态文本的内容的方法,如下3种:
第一种:
SetDlgItemText( IDC_STATIC1, "shit!!! "); // 这个时候,单词“shit”真应景。
第二种:
GetDlgItem(IDC_STATIC1)-> SetWindowText( "shit");
说明一下,GetDlgItem(IDC_STATIC1)返回的是CWnd对象的指针。
如果已经新建了变量,直接用那个变量就行:
假设变量名为m_myStatic1,那么m_myStatic1.SetWindowText("shit")。即可
第三种:
比较实用的一种,因为用前面两种方法,动态库都是被动的,即结果提示信息只能是由对话框主动去获取。
那么如果要实现动态库主动发送消息给对话框并改变静态文本的内容呢?
可以使用SendMessage()来实现。
在动态库中有这样的一句即可----> ::SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)"shit");
说明:hWnd的类型是HWnd,指的是窗口句柄。于是乎,就需要先获得静态文本的句柄,那么怎么获得呢?如下:
HWND hWnd = GetDlgItem(IDC_STATIC1)->m_hWnd;
(补充:实践发现,上面那句代码要在dlg类的成员函数里面才能正常编译通过,至于为啥,暂不明了,有空再研究。)
当然,上面这句是在对话框的代码里面实现的,怎么把hWnd传给动态库呢?自个儿想办法吧
(完毕!)