用vc6生成win32对话框程序的简单方法
2004-10-26 14:30
609 查看
在project选择 win32 Application,然后选择自动生成一个“hello,world”程序,就可以的到一个普通窗口的对话框,而且带一个about对话框。
接着,删掉WinMain里的大部分代码,添加一个CreateDialog函数调用,如下:
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
// 创建主对话框,用CreateDialog创建的是非模态对话框,而DialogBox则是模态对话框,自己参考MSDN
HWND hMain = NULL;
hMain = CreateDialog( hInstance, (LPCTSTR)( IDD_ABOUTBOX ), NULL, (DLGPROC)About );
::SetWindowPos( hMain, HWND_TOP, 250,200, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
// ShowWindow( hMain, SW_SHOW) // 有了上边一句,这个就不用啦
::UpdateWindow( hMain );
if( NULL == hMain )
{
::MessageBox( NULL, "CreateWindow error", "error", MB_OK );
return -1;
}
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if( !::IsDialogMessage( hMain, &msg ) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
这样,就运行的时候就可以看到一个对话框了,但是有个问题,点击关闭对话框的时候,对话框并没有真正关闭,还需要修改一个小地方,在消息处理的回调函数About里,需要加上这个:
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
// EndDialog(hDlg, LOWORD(wParam)); //这个是在用DialogBox创建的模态对话框才需要用到,用了也没关系
PostQuitMessage( 0 ); // 这样才会完全退出
return TRUE;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
}
return FALSE;
}
最后,如果对话框模版里用到了不一般的控件(比如进度条),还需要
1 引用头文件:#include <commctrl.h>
2 并链接comctl32.lib,
3 在WinMain中创建对话框前调用InitCommonControls();
最后我本来想在对话框里加个进度条的,但是,不知道到如何用win32Api来控制它,有点郁闷,有知道的希望能够留言,谢谢
接着,删掉WinMain里的大部分代码,添加一个CreateDialog函数调用,如下:
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
// 创建主对话框,用CreateDialog创建的是非模态对话框,而DialogBox则是模态对话框,自己参考MSDN
HWND hMain = NULL;
hMain = CreateDialog( hInstance, (LPCTSTR)( IDD_ABOUTBOX ), NULL, (DLGPROC)About );
::SetWindowPos( hMain, HWND_TOP, 250,200, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
// ShowWindow( hMain, SW_SHOW) // 有了上边一句,这个就不用啦
::UpdateWindow( hMain );
if( NULL == hMain )
{
::MessageBox( NULL, "CreateWindow error", "error", MB_OK );
return -1;
}
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if( !::IsDialogMessage( hMain, &msg ) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
这样,就运行的时候就可以看到一个对话框了,但是有个问题,点击关闭对话框的时候,对话框并没有真正关闭,还需要修改一个小地方,在消息处理的回调函数About里,需要加上这个:
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
// EndDialog(hDlg, LOWORD(wParam)); //这个是在用DialogBox创建的模态对话框才需要用到,用了也没关系
PostQuitMessage( 0 ); // 这样才会完全退出
return TRUE;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
}
return FALSE;
}
最后,如果对话框模版里用到了不一般的控件(比如进度条),还需要
1 引用头文件:#include <commctrl.h>
2 并链接comctl32.lib,
3 在WinMain中创建对话框前调用InitCommonControls();
最后我本来想在对话框里加个进度条的,但是,不知道到如何用win32Api来控制它,有点郁闷,有知道的希望能够留言,谢谢
相关文章推荐
- VC 程序Release版本的生成方法
- android Gridview生成程序快捷键的简单方法
- 简单的Win32对话框程序
- vs2005 vc++ 生成非托管的 不需要.net运行环境的exe程序方法
- 对VS2008生成智能win32程序简单理解
- 基于对话框的MFC程序启动时完全隐藏的简单方法
- 第一个VC++ win32程序 绘制简单图形
- 一个简单的执行程序的GNU automake自动生成Makefile的方法及案例
- 自己动手让Visual Studio的Win32向导支持生成对话框程序
- 最简单的Windows win32 API 程序开发方法
- vs2012编译生成的程序在xp系统中显示不是有效的win32程序解决方法
- vc++生成程序不需要.net运行环境的可以执行exe程序的方法
- VC中无标题栏的对话框界面 ,如何来拖动程序的解决方法
- VC 开发控制台程序 不出现CMD对话框的方法
- VC++程序自校验的简单方法
- 自己动手让Visual Studio的Win32向导支持生成对话框程序
- 对VS2008生成智能win32程序简单理解
- VC++/MFC程序图标更改方法以及修改程序标题 超级简单啦
- 基于对话框的MFC程序启动时完全隐藏的简单方法