WIN32下 直接显示DIALOG 窗口不出现的怪问题

cayido 2007-08-21 10:17:05
代码如下:其实一开始只要求在WIN32下直接实现出现我定制好的DIALOG IDD_CHAT而已,但是hDlg有值但是窗口却不显示,不知是何原因

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
MSG msg;
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC__CHAT, szWindowClass, MAX_LOADSTRING);
HWND hDlg = CreateDialog(hInstance,(LPCTSTR)(IDD_CHAT),NULL,(DLGPROC)Chat);
if(! hDlg){
ShowWindow(hDlg, nCmdShow);
UpdateWindow(hDlg);
}

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (IsDialogMessage(hDlg,&msg) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int) msg.wParam;
}

对应的回调函数Chat:

LRESULT CALLBACK Chat(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
//UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}

hDlg有值,但是我showWINDOW不出来 我的环境是VS2005
第一个解决的我会给所有的分,谢谢了
...全文
855 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
chehw 2007-08-22
  • 打赏
  • 举报
回复
“尔”应改成“你”
chehw 2007-08-22
  • 打赏
  • 举报
回复
尔先GetLastError()看一下出错码。

可能的原因有:
1、对话框的style设置成了WS_CHILD
2、对话框中用了common controls(如listview)控件,但在WinMain中未调用InitCommonControlsEx
3、对话框中用了RichEdit控件,但在WinMain中未LoadLibrary
4、其他
xiaoQ008 2007-08-22
  • 打赏
  • 举报
回复
那你发这个贴是有何用意?
cayido 2007-08-22
  • 打赏
  • 举报
回复
我12楼发的本来就是好的 1楼的才是坏的
cayido 2007-08-22
  • 打赏
  • 举报
回复
我也不清楚原因 大家每人一分吧 我重新开了个项目 代码COPY了一下竟然好了
cayido 2007-08-21
  • 打赏
  • 举报
回复
CREATEDIALOG 返回无效窗口句柄 怎么办? 问题发现了但是 我不知道错在哪
linlan999 2007-08-21
  • 打赏
  • 举报
回复
if(! hDlg){
ShowWindow(hDlg, nCmdShow);
UpdateWindow(hDlg);
}

--->
if( hDlg){
ShowWindow(hDlg, nCmdShow);
UpdateWindow(hDlg);
     }
linlan999 2007-08-21
  • 打赏
  • 举报
回复
对话框资源头文件加到工程了没?????????/
cayido 2007-08-21
  • 打赏
  • 举报
回复
我刚发现是我CREATEDIALOG 返回地址是0x000000 好像创建没成功 WHY
应该不是消息环的问题 因为窗口还没显示出来
chehw 2007-08-21
  • 打赏
  • 举报
回复

if (IsDialogMessage(hDlg,&msg) ) continue;
TranslateMessage(&msg);
DispatchMessage(&msg);

cayido 2007-08-21
  • 打赏
  • 举报
回复
前面打错了 我ShowWindow写的是ShowWindow(hDlg, SW_SHOW);
xiaoQ008 2007-08-21
  • 打赏
  • 举报
回复
楼主
我帮你改了下
你试下
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK Chat(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
HWND hWnd;

// hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateDialog( hInstance,
MAKEINTRESOURCE( IDD_CHAT ),
NULL,
(DLGPROC)Chat);
if ( NULL == hWnd)
{
MessageBox( NULL, "Create Window Error!", "ERROR", MB_OK );
return FALSE;
}

// SetWindowPos( hWnd,
// HWND_TOP,
// 250, 200, 0, 0,
// SWP_NOSIZE | SWP_SHOWWINDOW );
ShowWindow(hWnd, SW_SHOW);
UpdateWindow( hWnd );

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if( !::IsDialogMessage( hWnd, &msg ) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return msg.wParam;

}



LRESULT CALLBACK Chat(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
//UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
EndDialog(hDlg,0);
}
break;
}
return FALSE;
}
cayido 2007-08-21
  • 打赏
  • 举报
回复
MSG msg;
HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateDialog( hInstance,
(LPCTSTR)( IDD_MAIN ),
NULL,
(DLGPROC)MainProc );
if ( NULL == hWnd)
{
MessageBox( NULL, "Create Window Error!", "ERROR", MB_OK );
return FALSE;
}

// SetWindowPos( hWnd,
// HWND_TOP,
// 250, 200, 0, 0,
// SWP_NOSIZE | SWP_SHOWWINDOW );
ShowWindow(hWnd, SW_SHOW);
UpdateWindow( hWnd );

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if( !::IsDialogMessage( hWnd, &msg ) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return msg.wParam;

别人给我可以显示出来的..
我怎么就不行 郁闷
cayido 2007-08-21
  • 打赏
  • 举报
回复
根源是CREATE失败 但是我不知道失败的原因 上面就换个CHAR* 怎么可能对
flypig917 2007-08-21
  • 打赏
  • 举报
回复
HWND hwnd;
MSG msg;
hwnd=CreateDialog(hInstance,(char *)IDD_CHAT,0,Chat);
ShowWindow(hwnd,SW_SHOW);
while(GetMessage(&msg,NULL,0,0))
{
if(!IsDialogMessage(hwnd,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
liuxiuk 2007-08-21
  • 打赏
  • 举报
回复
你trace下hDlg看看..
cayido 2007-08-21
  • 打赏
  • 举报
回复
没用 2种都试过了 这种我早就试过了
liuxiuk 2007-08-21
  • 打赏
  • 举报
回复
HWND hDlg = CreateDialog(hInstance,(LPCTSTR)(IDD_CHAT),NULL,(DLGPROC)Chat);
----
HWND hDlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_CHAT),NULL,(DLGPROC)Chat);

//IDD_CHAT是你对话框的ID

16,473

社区成员

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

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

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