Win32 API 如何显示非模态对话框啊?

stonefire 2003-08-24 10:12:29
switch(LOWORD(wParam))
{
case IDM_OPENDLG:
if(hDlg)
DestroyWindow(hDlg);
hDlg=CreateDialog(hInst,MAKEINTRESOURCE (IDD_DIALOG1),hwnd, (DLGPROC)DlgProc);
break;
}
显示非模态对话框可是显示不出来,怎么回事了。
源程序是这样子的:

#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL CALLBACK DlgProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
HWND hDlg;
HINSTANCE hInst;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
static TCHAR szAppName[]=("hello, vc++");
static TCHAR lpszTitle[]=("My First program");
HWND hwnd;
MSG msg;
hInst=hInstance;
WNDCLASS wcex;

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC)WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(NULL,IDI_APPLICATION);

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

wcex.lpszMenuName = NULL;

wcex.lpszClassName = szAppName;

HMENU hmenu;
hmenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1));


if(!RegisterClass(&wcex))
{
MessageBox(NULL,TEXT("This program reguire Windows NT!"),szAppName,MB_ICONERROR);
return 0;
}

hwnd = CreateWindow(szAppName,TEXT("The hello program"),WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hmenu,hInstance,NULL);

if(!hwnd)
{
MessageBox(NULL,TEXT("can't creat windows"),szAppName,MB_ICONERROR);
return 0;
}

ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
if(!IsDialogMessage(hDlg,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_OPENDLG:
if(hDlg)
DestroyWindow(hDlg);
hDlg=CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,(DLGPROC)DlgProc);
break;
}
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("hello VC6.0"),15,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
BOOL CALLBACK DlgProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return 1;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
if(hDlg)
DestroyWindow(hDlg);
EndDialog(hDlg,0);
return 1;
}
case WM_CLOSE:
if(hDlg)
DestroyWindow(hDlg);
EndDialog(hDlg,0);
return 1;
}
return 0;

}
...全文
294 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
stonefire 2003-08-24
  • 打赏
  • 举报
回复
谢谢!
搞定了。
joinrry 2003-08-24
  • 打赏
  • 举报
回复
agree!
bcpl 2003-08-24
  • 打赏
  • 举报
回复
在CreateDialog后加上
ShowWindow(hDlg, SW_SHOW);
 前言   第一篇 软件设计基础篇   第1章 软件开发起步 2   1.1 建立MFC应用程序 2   1.2 分析框架结构 4   1.2.1 框架代码文件的结构 4   1.2.2 应用程序类 5   1.2.3 对话框类 6   1.2.4 添加消息响应 7   第2章 对话框应用程序 9   2.1 模态对话框 9   2.1.1 实例:使用MFC实现模态对话框 9   2.1.2 实例:使用Win32 API实现模态对话框 10   2.2 模态对话框 12   2.2.1 实例:使用MFC实现模态对话框 12   2.2.2 实例:使用Win32 API实现模态对话框 13   2.3 属性对话框 14   2.3.1 实例:多页面切换程序 14   2.3.2 实例:向导对话框   2.4 对话框设计技巧   2.5 通用对话框   第3章 基本控件   ……   第4章 文档与视图   第5章 GDI绘图技术   第6章 键盘与鼠标消息 第二篇 软件设计综合应用篇   第7章 网络通信基础   第8章 密码学算法   第9章 多媒体技术   第10章 数据库技术   第11章 综合实例开发 第三篇 Windows系统程序设计篇   第12章 进程与线程   第13章 内存管理   第14章 进程间通信   第15章 线程同步   第16章 动态链接库   第17章 结构化异常处理   第18章 可执行文件格式   第19章 模块注入与函数挂接技术   附录 光盘源码实例

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧