//下面的代码几乎都是抄孙鑫的视频教程里面来的,我在VC6里面能编译能过,但是运行时就是不显示窗口,但在进程里面却发现有在运行。
//请问这到底是怎么回事啊?? 由于一直以来都是在用MinGw来写C++,对于VC不是太了解。我也想知道VC6的补丁版本怎样查,不知我的要不要装补丁。
//谢谢了! 希望以后多指教!!!
#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 nShowCmd
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbClsExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="Hello Dan";
wndcls.lpszClassName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls);
HWND hwnd;
hwnd=CreateWindow("Love SDK","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,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, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"Char is %d",wParam);
MessageBox(hwnd,szChar,"Hello",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"Mouse clicked ","World",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"Computer science",strlen("Computer science"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC dc;
PAINTSTRUCT ps;
dc=BeginPaint(hwnd,&ps);
TextOut(dc,0,0,"Sun Java",strlen("Sum Java"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"Do you really want to exit?","EXIT",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
解决方案 »
- https的客户端用open_ssl编程,需要实现数字签名和SSL
- VC添加控件问题
- 面试题目:如何启动其他进程,写出你所知道的方式?
- 难题高分
- 请问如何在使用MFC的应用程序中调用本来用于SDK应用程序的CZipFile和zlib.lib?
- 插入以CListView为基类的新类,编译报错
- 求助!!!
- 也就是说我只要添加了MSCOMM这个控件,就无须再调用它的 Create(........)函数,直接设置它的一些参数就行了,是吗?另:ONCOMM事件处理函数里只加入接受数据的代码,而发送数据的代码必须另用一个函数,是吗?谢谢!
- 如何使编辑框中的文字处于被选定状态?
- 如何实现函数参数的缺省,
- VC6.0 下 C文件 和 C++文件 能混合编译吗?
- 2个字母组合的快捷键(如AB)
请问有谁遇到过这样的问题吗?
Thanks
wndcls.cbClsExtra=0;
wndcls.cbClsExtra=0;
cbWndExtra;2.
CreateWindow("Hello Dan"....
wndcls.lpszClassName=NULL;
你最好在比对比对
#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 nShowCmd
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="Hello Dan";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls);
HWND hwnd;
hwnd=CreateWindow("Hello Dan","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,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, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"Char is %d",wParam);
MessageBox(hwnd,szChar,"Hello",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"Mouse clicked ","World",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"Computer science",strlen("Computer science"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC dc;
PAINTSTRUCT ps;
dc=BeginPaint(hwnd,&ps);
TextOut(dc,0,0,"Sun Java",strlen("Sum Java"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"Do you really want to exit?","EXIT",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
wndcls.lpszClassName="Hello Dan"; //窗口类的名称是"Hello Dan"
// wndcls.lpszClassName=NULL; //错了,上面赋值了,怎么又改成NULL?
wndcls.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndcls);
HWND hwnd;
// hwnd=CreateWindow("Love SDK","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
hwnd=CreateWindow("Love Dan","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
//创建的窗口类要和注册的一致,最好用一个变量来保存这个窗口类名成,防止输入错误
hwnd=CreateWindow("Hello Dan","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
所以说用一个变量来保存窗口类名是多么有必要。
wndcls.lpszClassName=NULL;和 创建的类名不一致
wndcls.cbClsExtra=0;
wndcls.cbClsExtra=0;
上面两句话改为:
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;2.
wndcls.lpszClassName="Hello Dan";
wndcls.lpszClassName=NULL;
上面两句改为:
wndcls.lpszClassName="Hello Dan";
wndcls.lpszMenuName=NULL;3.
hwnd=CreateWindow("Love SDK","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
修改为:
hwnd=CreateWindow("Hello Dan","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);