原创 WinMain里用DialogBox直接创建dialog窗口,这样做有什么缺点?

2010-2-3 22:04 5957 2 4 分类: 软件与OS

以前一直用的书上的代码,今天试了下WinMain里直接DialogBox也行。省去了那些retister   class什么的,代码如下:

C/C++ code


#include <windows.h>

#include "resource.h"



LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) ;



int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {

DialogBox( hInstance, ( LPCTSTR ) IDD_DIALOG1, NULL, ( DLGPROC ) WndProc );



return 0;

}

LRESULT CALLBACK WndProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch(uMsg){

case WM_INITDIALOG:

{

}

break;

case WM_COMMAND:

switch(LOWORD( wParam )) {

case IDOK:

{

EndDialog( hDlg, 0 );

}

break;

};

break;

case WM_CLOSE:

EndDialog( hDlg, 0 );

break;

};

return 0;

}




比起先register   class,CreateWindow,然后GetMessage,TranslateMessage,DispatchMessage   ,   直接把所有工作交给DialogBox不是更方便?请问这样做有什么缺点?
20 回复次数:7

第1个回答
没什么缺点。
模态对话框有自己的消息循环。




第2个回答
这样写小程序比较快的.




第3个回答
其实对话框和普通窗口都差不多.只不过普通窗口程序需要自己定义窗口过程,而对话框系统负责,但是修改rc文件,可以把默认的窗口过程替换成用户自己的,有点忘记了,大概这样.对话框只是一个特殊的窗口.




第4个回答
没什么缺点。这样写比自己注册类简单一点,比用MFC麻烦。主要看个人爱好。




第5个回答
缺点就是自由度不够。但凡省事的,总有缺失的。




第6个回答
好用就好,管那么多优点缺点干嘛




第7个回答
int   WINAPI   WinMain(HINSTANCE   hInstance,   HINSTANCE   hPrevInstance,   PSTR   szCmdLine,   int   iCmdShow)   {
        DialogBox(   hInstance,   (   LPCTSTR   )   IDD_DIALOG1,   NULL,   (   DLGPROC   )   WndProc   );

        return   0;
}
=================================================================================================
Windows   uses   its   own   internal   window   procedure   to   process   messages   to   a   dialog   box   window.   Windows   then   passes   these   messages   to   a   dialog   box   procedure   within   the   program   that   creates   the   dialog   box.  

so   application   cannot   catch   such   as   WM_KEYUP,WM_KEYDOWN   messages   in   its   own   DialogProc.
(   try   to   catch   them)

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2014-3-28 10:20

3Q

用户377235 2012-10-19 00:31

用 VS2010 时,没有出现对话框!不知道怎么回事?请教

相关推荐阅读
用户12759 2011-02-21 18:06
如何让程序调至某个地址执行——解析typedef void (*newtypename) (void
今天读源码,里面有这么一句:typedef void(*ISR_func_t)(void);  比较令人费解。查资料得:这是定义了一个新类型ISR_func_t ,它是指向函数的指针,这个函数的参数是...
用户12759 2011-02-13 13:55
问怎样才能学好VC++?VS2005版
请曾经经历VC入门痛苦期的高手们不吝介绍自己的宝贵学习经验,针对我的情况给些建议,谢谢 我是初学者,主要将用于图像处理。 说是初学其实也看了几本VC入门书了,C++的基础大致理解,传说中孙鑫的视频教程...
用户12759 2011-02-13 13:51
VC++编程实现对波形数据的频谱分析
摘要: 本文介绍了采用离散傅立叶变换(DFT)实现对采样得到的波形数据文件进行频谱分析的一般方法,并且为了提高运算效率、节省中间存储单元,最终采用了"时间抽选奇偶分解"的"库利-图基算法"实现快速离散...
用户12759 2011-02-12 18:29
chm文件无法搜索或者MSDN搜索失效解决方法
作为一个程序员, 你可能经常在写程序的时候用F1打开MSDN, 搜索函数的帮助,可是有的时候,会莫名其妙的, 不知道什么原因, 导致MSDN的搜索功能失效, 无论你输入什么, 都搜索不到, 在索引里面...
用户12759 2011-02-12 18:25
RIFF格式声音文件的实现
摘要:本文简述RIFF格式声音文件的构成,通过调用多媒体文件I/O的三个重要函数及WAVEFormatX结构数据的使用方法来实例阐述RIFF格式声音文件的实现过程。 关键词:RIFF[资源交换文件]格...
用户12759 2011-02-12 18:18
vc中读取wav文件的时长和文件播放的几种方式
读取wav文件的时长: int GetTimeLength() //获取声音文件数据的函数,pString参数指向要打开的声音文件; { HMMIO file;//定义HMMIO文件句柄; file=...
EE直播间
更多
我要评论
2
2
关闭 站长推荐上一条 /3 下一条