随笔-145  评论-173  文章-70  trackbacks-0
在初学MFC的时候,选择了这本《Visual C++通用范例开发金典》这本书,非常不错,关键是很多基本的知识和小技巧。

然而,第一个Demo就让我很郁闷,半天都没有搞出来。不过昨晚,做了第二个的时候,出现了转机,不仅实现了课本上的功能,还完成了扩展操作,同时,对于消息映射的具体操作,如何手动添加消息映射代码,不借助工具有了新的体会,这个也导致了我完成了第一个的测试。

先前,对于MFC的实现仅仅看了下《深入浅出MFC》,不过很懵懂,不知道具体的做法。虽然很经典,不过对于我这个初学者还是很困难。
今天再次消化,终于得到了正确的做法。
原帖见CSDN上面的疑问:http://topic.csdn.net/u/20100203/21/4eec88fc-1eaa-4e82-8d68-d4475d419b38.html?50579
CSDN牛人辈出,也很热心,狂赞!!

具体来说就是,我更改了Static控件的属性,添加了代码,使得它可以更改,可是结果却没有任何实现,点击没有反应。于是不知所错。
后面,遵照上面高人指点,修改了Static的ID,改为IDC_3,就可以了,当时改成IDC_STATIC1还不行,后来成功之后,居然再改回来又可以,所以觉得这个世界很奇妙,很多东西都让人不知所错的迷茫啊!

具体来说就是两点:
1.修改ID,改为一个不是默认的值,然后更改属性为nofify。
2.添加方法,具体来说就是直接双击,出现一个对话框来显示这个方法,于是OK。
3.编写方法体,具体来说就是这个代码。
void CAdwDlg::OnStatic1() 
{
    
// TODO: Add your control notification handler code here
    CString str;
    GetDlgItem(IDC_STATIC1)
->GetWindowText(str);
    
if(str == "Hello,world")
        GetDlgItem(IDC_STATIC1)
->SetWindowText("nice!");
    
if(str == "nice!")
        GetDlgItem(IDC_STATIC1)
->SetWindowText("good!");
    
if(str == "good!")
        GetDlgItem(IDC_STATIC1)
->SetWindowText("Hello,world");
}

然后就完成了所有的任务,很简单,当然,添加方法以前都没有实现过。后来发现,编译器实际上给我们做了两件事情。

1.在主类中添加了相应的处理函数,也就是把我们这里处理消息的函数放在类中,作为一个成员函数,放在.h文件中声明
2.在实现中,添加了消息映射的代码,就是前面的
BEGIN_MESSAGE_MAP(CAdwDlg, CDialog)
    
//{{AFX_MSG_MAP(CAdwDlg)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_STATIC1, OnStatic1)
    
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
有了这两步,就完成了全部的工作,添加了代码之后,就成功的实现了我们的目的。
即,建立消息处理机制,那么,整个工作就完成了。。

下载地址是:http://www.pudn.com/downloads225/sourcecode/windows/control/static/detail1058929.html

MFC的机制也就是这么多,正在进一步学习中。。。。。
posted on 2010-02-04 15:28 deercoder 阅读(399) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理