| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1609 人关注过本帖
标题:为什么窗口没有弹出,C++初学者
只看楼主 加入收藏
shuting
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-7-22
收藏
 问题点数:0 回复次数:11 
为什么窗口没有弹出,C++初学者

我是初学者,请大家指教错误在哪里.编译后进程里面有,但窗口弹不出.代码如下:
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbClsExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="shuting";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);

HWND hwnd;
hwnd=CreateWindow("shuting","我的第一个程序",WS_OVERLAPPEDWINDOW,
0,0,800,600,NULL, NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);

MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);

}
return 0;

}
LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"shuting",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","shuting",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"我的第一个程序",strlen("我的第一个程序"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"My first program",strlen("My first program"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"你真的要退出吗","shuting",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}

搜索更多相关主题的帖子: windows 窗口 int 
2007-08-25 10:19
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 

很可能是你的窗口类没有注册成功,你判断一下RegisiterClass的返回值


天行健,君子以自强不息!!QQ:68660681
2007-08-25 12:23
shuting
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-7-22
收藏
得分:0 
我不知道怎么判断啊,请指教
2007-08-25 16:54
等待
Rank: 1
等 级:新手上路
帖 子:173
专家分:0
注 册:2005-12-1
收藏
得分:0 
就是注册不成功,找了半天没有发现错误的所在,根本原因在哪里呢

2007-08-25 17:01
等待
Rank: 1
等 级:新手上路
帖 子:173
专家分:0
注 册:2005-12-1
收藏
得分:0 
把主函数中的RegisterClass(&wndcls); 改成
if (!RegisterClass (&wndcls))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
"shuting", MB_OK) ;
return 0 ;
}
之后就会跳出一个提示框

2007-08-25 17:04
shuting
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-7-22
收藏
得分:0 
谢谢,我试一试
2007-08-25 17:07
shuting
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-7-22
收藏
得分:0 
按楼上所说,提示:this program requires Windows NT!
是什么意思呀,需要怎么修改?
2007-08-25 17:27
shuting
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-7-22
收藏
得分:0 

这两段代码有什么地方不一样,为什么用第二段的时候就没有弹出窗口,(第一段正确)我看了n遍也没有发现不同之处,郁闷
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="shuting";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);

/*WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbClsExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="shuting";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
//RegisterClass(&wndcls);
RegisterClass(&wndcls);*/

2007-08-25 18:10
Arcticanimal
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:341
专家分:20
注 册:2007-3-17
收藏
得分:0 
以下是引用shuting在2007-8-25 18:10:57的发言:

这两段代码有什么地方不一样,为什么用第二段的时候就没有弹出窗口,(第一段正确)我看了n遍也没有发现不同之处,郁闷
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="shuting";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);

/*WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbClsExtra=0; //这是 ?
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="shuting";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
//RegisterClass(&wndcls);
RegisterClass(&wndcls);*/


try new catch
2007-08-25 21:55
xlh5225
Rank: 2
等 级:论坛游民
威 望:2
帖 子:188
专家分:25
注 册:2007-8-14
收藏
得分:0 
wndcls.cbClsExtra=0;
wndcls.cbClsExtra=0;
第二个改为:wndcls.cbWndExtra=0;
小了点嘛~~~
窗口设计都没有完全,怎么能正常显示呢~~~~呵呵

2007-08-25 22:21
快速回复:为什么窗口没有弹出,C++初学者
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034962 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved