您的位置:首页 > 其它

用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来控制它,有点郁闷,有知道的希望能够留言,谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: