读<Windows程序设计(第4版)>,Windows 下编程 有关对话框程序的问题,待解决!!

fengcaho 2004-05-05 04:14:10
程序是这样的:我建了一个对话框资源,然后在里面添加了CLASS "Server2"
下面运行
#include "stdafx.h"
#include "resource.h"
#include <windows.h>

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char szAppName[]="Server2" ;
UINT Ret;
MSG msg;
HWND hwnd ;


WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = DLGWINDOWEXTRA ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground= (HBRUSH)(COLOR_BTNFACE+1) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName= szAppName ;


if (!RegisterClass (&wndclass))

{

MessageBox ( NULL, TEXT ("This program requires Windows NT!"),szAppName, MB_ICONERROR) ;

return 0 ;

}

hwnd=CreateDialog(hInstance,szAppName,0,NULL);
Ret=GetLastError();
ShowWindow (hwnd, nCmdShow) ;

while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

return msg.wParam ;
}


LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{
HWND hText;//
HDC hdc ;
PAINTSTRUCT ps ;
int iTemp;

switch (message)

{
case WM_CREATE:
MessageBox(NULL,"A","A",NULL);
break;
case WM_PAINT://显示本机IP地址
break;
case WM_COMMAND:
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;

}
为什么我CreateDialog()之后得到的句柄是0?但是Ret的值也为0,怎么回事?请高手解答!!!
...全文
15 9 点赞 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fengcaho 2004-05-06
我的窗口就是从对话框模板创建的啊,正是因为这样,才使用CreateDialog()函数的
  • 打赏
  • 举报
回复
fenforever 2004-05-06
CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, (DLGPROC)WndProc);

那些注册窗口类的代码可以去掉,因为对话框是系统已经定义了的窗口类。
  • 打赏
  • 举报
回复
vc99 2004-05-06
老弟,你心太急,以致于几乎所有的涉及到的基本概念都没搞清楚,混淆了。
我帮你把程序修改了一下,你再仔细看看对话框的有关内容,就会明白了。
我觉得你的代码中最直接的错误是这句:CreateDialog(hInstance,szAppName,0,NULL);
既然你使用了szAppName做为参数,那么你必须把你定义的对话框资源的ID指定为"Server2"。

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

BOOL CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char szAppName[]="Server2" ;
DialogBox(hInstance,szAppName,NULL,(DLGPROC)WndProc);

return 1;
}


BOOL WINAPI WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_PAINT:

break;

case WM_COMMAND:
switch(LOWORD(wParam))
{

case IDCANCEL:
EndDialog(hwnd,FALSE);
return TRUE;
}

}
return FALSE;
}
  • 打赏
  • 举报
回复
comshowboy 2004-05-05
这个是好像看不出什么问题呀 肯能因为我是一个新手吧
以后的多向大家学习
  • 打赏
  • 举报
回复
fenforever 2004-05-05
因为CreateDialog是需要你从一个资源中的对话框模板来创建的,所以你不需要创建窗口类。
你的程序可以使用CreateWindow。
  • 打赏
  • 举报
回复
linzcode 2004-05-05
你创建的好象不是SDK程序
  • 打赏
  • 举报
回复
linzcode 2004-05-05
看不出有什么问题
  • 打赏
  • 举报
回复
fengcaho 2004-05-05
对话框过程就是WndProc啊
  • 打赏
  • 举报
回复
linzcode 2004-05-05
你没定义对话框窗口过程
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC
加入

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-05-05 04:14
社区公告

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