初学VC,我写了一个Hello World程序。本意是想显示出一个最基本的窗口,但是运行后屏幕上什么都没有。请问哪里有问题?另外,其中两句我注释掉的语句,都通不过编译,错误信息如下:
WndClass.hbrBackground = COLOR_BTNFACE+1; <-- cannot convert from 'const int' to 'struct HBRUSH__ *
UnRegisterClass(...) <-- undeclared identifier
不知如何解决?我的代码如下(整个工程只有一个HelloWorld.cpp文件)HelloWorld.cpp#include "windows.h"LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass; if (!hPrevInstance) {
//WndClass.hbrBackground = COLOR_BTNFACE+1;
WndClass.hCursor = LoadCursor(0, IDC_ARROW);
WndClass.hIcon = LoadIcon(0, IDI_WINLOGO);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = &WndProc;
WndClass.lpszClassName = "HelloWorldClass";
WndClass.style = CS_PARENTDC; RegisterClass(&WndClass);
} hWnd = CreateWindow(WndClass.lpszClassName,
"Hello World",
WS_OVERLAPPEDWINDOW,
50,
50,
320,
240,
NULL,
NULL,
hInstance,
NULL); ShowWindow(hWnd, SW_SHOWNORMAL);
while (GetMessage(&Message, hWnd, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
} //UnRegisterClass(WndClass.lpszClassName, hInstance);
ExitProcess(0);
return 0;
}
WndClass.hbrBackground = COLOR_BTNFACE+1; <-- cannot convert from 'const int' to 'struct HBRUSH__ *
UnRegisterClass(...) <-- undeclared identifier
不知如何解决?我的代码如下(整个工程只有一个HelloWorld.cpp文件)HelloWorld.cpp#include "windows.h"LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass; if (!hPrevInstance) {
//WndClass.hbrBackground = COLOR_BTNFACE+1;
WndClass.hCursor = LoadCursor(0, IDC_ARROW);
WndClass.hIcon = LoadIcon(0, IDI_WINLOGO);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = &WndProc;
WndClass.lpszClassName = "HelloWorldClass";
WndClass.style = CS_PARENTDC; RegisterClass(&WndClass);
} hWnd = CreateWindow(WndClass.lpszClassName,
"Hello World",
WS_OVERLAPPEDWINDOW,
50,
50,
320,
240,
NULL,
NULL,
hInstance,
NULL); ShowWindow(hWnd, SW_SHOWNORMAL);
while (GetMessage(&Message, hWnd, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
} //UnRegisterClass(WndClass.lpszClassName, hInstance);
ExitProcess(0);
return 0;
}
解决方案 »
- GDI处理tif文件
- WIN7 调用其他程序问题
- 如何欺骗本地的dns请求信息
- 50分:vc链接sqlServer2000,查询记录值返回是-1
- 怎样缩放IDirect3DSurface8,就像CDC::StretchBlt。IDirect3DDevice8::CopyRects没有提供缩放功能。谢谢!
- 一个提取EXE文件资源的问题(如何保存里面的MIDI的资源)
- 请问怎么replace一个字符串中指定的字符??
- 在程序中发出的点击消息怎么让NT(我的系统是NT4)知道!
- 请问怎样发送一个自定义消息?
- 十万火急!!!!!有谁知道那里有控件支持USB设备数据的读取?兄弟有300分奉上!
- 简单的问题
- 已知年月日,如何确定是星期几?
或者
WndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
WndClass.hbrBackground = (HBRUSH)COLOR_BTNFACE不对!显示出来的窗口是白色底色。如果按照API的说明,用WndClass.hbrBackground = (HBRUSH)COLOR_BTNFACE+1,显示出来是黑色底色。
怎么回事?
没有错,COLOR_XXX的值加一就是相应颜色的刷子的句柄。关键问题是没有事先把WndClass清空,这样里面没有设置过的成员都是0xCCCCCCCC,在WNDCLASS WndClass;后面加一句memset(&WndClass, 0, sizeof(WNDCLASS));就好了。其它的问题有:GetMessage(&Message, hWnd, 0, 0)) 应该是:GetMessage(&Message, NULL, 0, 0)),避免窗口关闭后程序无法退出的问题。ExitProcess(0);没有必要,return 0;后就自动退出了。
//UnRegisterClass(WndClass.lpszClassName, hInstance);要不要没有关系。
sans(sans)
我以为最后一条回复也是你的,就只给了一次分!
请到我的一个新帖子拿分:
http://www.csdn.net/expert/topic/967/967693.xml