初学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;
}

解决方案 »

  1.   

    WndClass.hbrBackground = (HBRUSH)COLOR_BTNFACE;
    或者
    WndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
      

  2.   

    另外UnRegisterClass就没有必要了,系统自动会做的。
      

  3.   

    刚刚又去调试了一下,发现CreateWindow返回的hWnd是0x0000000,难怪显示不出任何窗口!可是为什么会这样?哪里错了?
      

  4.   

    TO: sans(sans)
    WndClass.hbrBackground = (HBRUSH)COLOR_BTNFACE不对!显示出来的窗口是白色底色。如果按照API的说明,用WndClass.hbrBackground = (HBRUSH)COLOR_BTNFACE+1,显示出来是黑色底色。
    怎么回事?
      

  5.   

    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);要不要没有关系。
      

  6.   

    啊!抱歉!
    sans(sans)
    我以为最后一条回复也是你的,就只给了一次分!
    请到我的一个新帖子拿分:
    http://www.csdn.net/expert/topic/967/967693.xml