高手指点,短短几行代码,不知道问题在哪里

hexcalc 2003-07-30 12:12:23
#include "stdafx.h"
#include "windows.h"

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
static TCHAR szname[]=TEXT("IDD_DIALOG");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;

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

RegisterClass(&wndclass);


hwnd=CreateDialog(hInstance,szname,0,NULL);
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)
{

switch(message)
{
case WM_CREATE:
break;
case WM_DESTROY:
break;
return 0;
}

return DefWindowProc(hwnd,message,wparam,lparam);

}

创建一个对话框,为什么对话框不出现,进程却创建了。
...全文
40 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
FAICHEN 2003-07-30
  • 打赏
  • 举报
回复
yinx(★什么时候才能变成红色的)
给出的是一个模式对话框的建立
楼主需要的是一个没有主窗口的非模式对话框
FAICHEN 2003-07-30
  • 打赏
  • 举报
回复
IDD_DIALOG DIALOG -1, -1, 102, 122
STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CLASS "IDD_DIALOG"
CAPTION “IDD_DIALOG"
同上看法,需要模版资源
yinx 2003-07-30
  • 打赏
  • 举报
回复
对话框窗口的窗口函数结构、消息循环和普通窗口的不太一样,看看《programming windows》吧

下面是里面的一段代码
/*------------------------------------------
ABOUT1.C -- About Box Demo Program No. 1
(c) Charles Petzold, 1998
------------------------------------------*/

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

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
BOOL CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)

{
static TCHAR szAppName[] = TEXT ("About1") ;
MSG msg ;
HWND hwnd ;
WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (hInstance, szAppName) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = szAppName ;
wndclass.lpszClassName = szAppName ;

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

hwnd = CreateWindow (szAppName, TEXT ("About Box Demo Program"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HINSTANCE hInstance ;

switch (message)
{
case WM_CREATE :
hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
return 0 ;

case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDM_APP_ABOUT :
DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;
break ;
}
return 0 ;

case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG :
return TRUE ;

case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
case IDCANCEL :
EndDialog (hDlg, 0) ;
return TRUE ;
}
break ;
}
return FALSE ;
}

FAICHEN 2003-07-30
  • 打赏
  • 举报
回复
没有UpdateWindow(hwnd);
也可以
思危 2003-07-30
  • 打赏
  • 举报
回复
CreateDialog 需要对话框模板资源,你没有所以会这样
loopyifly 2003-07-30
  • 打赏
  • 举报
回复
...

用vc自动生成一个HelloWorld程序看看,比较一下就知道问题在哪了
smallcrocodile 2003-07-30
  • 打赏
  • 举报
回复
UpdateWindow(hwnd);
支持楼上的楼上
lygfqy 2003-07-30
  • 打赏
  • 举报
回复
你的对话框怎么没有消息处理函数呢?加一个应该就没有这些问题了
mfc168 2003-07-30
  • 打赏
  • 举报
回复

......
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
......
bjzhaoxiao 2003-07-30
  • 打赏
  • 举报
回复
同意FAICHEN(CC) ( )
思危 2003-07-30
  • 打赏
  • 举报
回复
把你的程序发过来,pengdayu38@sina.com, 我看看
FAICHEN 2003-07-30
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include "windows.h"


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
static TCHAR szname[]=TEXT("IDD_DIALOG");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;

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

RegisterClass(&wndclass);


hwnd=CreateDialog(hInstance,szname,0,NULL);
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)
{

switch(message)
{
case WM_CREATE:
break;
case WM_DESTROY:
break;
return 0;
}

return DefWindowProc(hwnd,message,wparam,lparam);

}
添加一个resource系统会自动建立起一个yourproject.rc和resource.h文件
然后再资源编辑器里新建一个dialog,注意id的名字一定要叫"IDD_DIALOG"要和你
注册的那个一样啊,要加引号,就没问题拉
mfc168 2003-07-30
  • 打赏
  • 举报
回复
推荐你弄一本《深入浅出MFC》第二版,那里有很详细的程序说明
FAICHEN 2003-07-30
  • 打赏
  • 举报
回复
我今天试过了,没问题阿
就需要添加资源就可以,你上面的程序没有要改的,当然从你上面的消息处理,对对话框是没有处理的,我发给你吧
gjgj3368 2003-07-30
  • 打赏
  • 举报
回复
学习中,up
hexcalc 2003-07-30
  • 打赏
  • 举报
回复
希望大家在帮忙想办法,我保证除了我自己的贴子左右贴子都加分
hexcalc 2003-07-30
  • 打赏
  • 举报
回复
问题看来不在这些情况里
hexcalc 2003-07-30
  • 打赏
  • 举报
回复
多谢各位指点,但是,以上方法全都试过了,结果还是一样的, 大家不妨把代码

考下试试,资源里我已经定义了IDD_DIALOG ,PIPI0714你好, 我是CC的学生
Pipi0714 2003-07-30
  • 打赏
  • 举报
回复
RegisterClass(&wndclass);//此行注册失败,
在 WNDCLASS wndclass ;行家下面的代码:
memset(&wndclass,0,sizeof(wndclass));
请问你是谁?长春的么?
fbmsf 2003-07-30
  • 打赏
  • 举报
回复
我晕
dialog 是用的,资源文件,
不知道为什么楼主会在那里面突然加一句:
hwnd=CreateDialog(hInstance,szname,0,NULL);

看你是想写 windows的标准的程序,
用这个吧。
hwnd = CreateWindow (szAppName, TEXT ("About Box Demo Program"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
加载更多回复(3)

16,471

社区成员

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

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

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