当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: MFC界面包装类 ——多线程时成
 

 

    摘要:追根究底,mfc六大关键技术之剖析(第二部分)小李先生二、运行时类型识别(rtti)运行时类型识别(rtti)即是程序执行过程中知道某个对象属于某个类,我们平时用c++编程接触的rtti一般是编译器的rtti,即是在新版本的vc++编译器里面选用“使能rtti”,然后载入typeinfo.h文件,就可以使用一个叫typeid()的运算子,它的地位与在c++编程中的sizeo......
 ·用visual c++打造ie浏览器(3)     »显示摘要«
    摘要:二、实现收藏菜单   一般ie的用户都有个习惯,那就是将自己喜欢的网址保存起来,以方便今后快速的登陆,为了使我们的浏览器能够显示ie收藏过的网址,程序中设置了一个"favorites"菜单,通过regopenkey()、regqueryvalueex()等函数操作windows的注册表中的hkey_current_user\\software\\microsoft\\windows\\curr......


MFC界面包装类(多线程时成员函数调用的断言失败)
 

mfc界面包装类

    经常在论坛上看到如下的问题: 【程序编程相关:VC++中进程与多进程管理的方法

——多线程时成员函数调用的断言失败 【推荐阅读:VC下通过系统快照实现进程管理

{ 【扩展信息: WMI使用说明(翻译)

dword winapi threadproc( void *pdata )  // 线程函数(比如用于从com口获取数据)

    // 数据获取循环

    // 数据获得后放在变量i中

    cabcdialog *pdialog = reinterpret_cast< cabcdialog* >( pdata );

    assert( pdialog );  // 此处如果assert_valid( pdialog )将断言失败

    pdialog->m_data = i;

    pdialog->updatedata( false );  // updatedata内部assert_valid( this )断言失败

    …

}

bool cabcdialog::oninitdialog()

{

    cdialog::oninitdialog();

    // 其他初始化代码

    createthread( null, 0, threadproc, this, 0, null );  // 创建线程

    return true;

}

    注意上面注释中的两处断言失败,本文从mfc底层的实现来解释为什么会断言失败,并说明mfc为什么要这样实现及相应的处理办法.

    在说明mfc界面包装类的底层实现之前,由于其与窗口有关,故先讲解窗口类这个基础知识以为后面做铺垫.

窗口类

    窗口类是一个结构,其一个实例代表着一个窗口类型,与c++中的类的概念非常相近(虽然其表现形式完全不同,c++的类只不过是内存布局与其上的操作这个概念的类型),故被称作为窗口类.

    窗口是具有设备操作能力的逻辑概念,即一种能操作设备(通常是显示器)的东西.由于窗口是窗口类的实例,就象c++中的一个类的实例,是可以具有成员函数的(虽然表现形式不同),但一定要明确窗口的目的——操作设备(这点也可以从microsoft针对窗口所制订的api的功能看出,主要出于对设备操作的方便).因此不应因为其具有成员函数的功能而将窗口用于功能对象的创建,这虽然不错,但是严重违反了语义的需要(关于语义,可参考我的另一篇文章——«语义的需要»),是不提倡的,但却由于mfc界面包装类的加入导致大多数程序员经常将逻辑混入界面.

    窗口类是个结构,其中的大部分成员都没什么重要意义,只是microsoft一相情愿制订的,如果不想使用界面api(windows user interface api),可以不管那些成员.其中只有一个成员是重要的——lpfnwndproc,消息处理函数.
...   下一页
    摘要:一、非法获取password的原理: edit控件是windows的一个标准控件,当把其password属性设为true时,就会将输入的内容屏蔽为星号,从而达到保护的目的。虽然我们看来都是星号,但程序中的edit控件实际仍是用户输入的密码,应用程序可以获取该控件中的密码,其他应用程序也可以通过向其发送wm_gettext或em_getline消息来获取edit控件中的内容。黑客程序正是利用edit......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE