Chinaunix首页 | 论坛 | 博客
  • 博客访问: 258538
  • 博文数量: 54
  • 博客积分: 2915
  • 博客等级: 少校
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-21 12:20
个人简介

这个人很懒,什么都没有留下

文章分类
文章存档

2013年(1)

2012年(6)

2011年(11)

2010年(16)

2009年(20)

我的朋友

分类: 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传给动态库呢?自个儿想办法吧

(完毕!)



阅读(5471) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

展翅大鹏2013-06-05 09:17:45

再请教一个问题,我编了一个打怪兽的游戏,在每一个回合有一个攻击者和被攻击者(随机数)。我把这个函数放在了Doc里面,但是我想在OnDraw函数里面把每一个回合的信息显示出来。我的做法是在Doc里面定义了几个public变量,在打斗过程中这几个变量会发生变化( 因为有多个回合,所以变量会多次变化)。在OnDraw函数里我把这几个变量显示出来。我的问题是:这几个变量在不断变化,OnDraw能时时更新显示吗?还是说OnDraw只能把变量最终的结果显示出来?我的目标是能让它时时显示。请教博主,谢谢!

展翅大鹏2013-06-05 08:32:00

最近才学习mfc,也遇到了和博主同样的问题,请教博主,我在Doc里定义了一个对话框变量,如hello  dlg;那么我这个时候应该如何改变dlg静态框的内容。是dlg.您提到的函数()。我试了试怎么感觉不可以呢?