我把源代码贴在下面,后面注释的为问题所在及我通过某些途径的修改(可通过编译,但运行无任何显示,不出现窗口)。
#include <windows.h>
HINSTANCE hIns;
HWND wndHandle;

bool initWindow(HINSTANCE);
LRESULT CALLBACK WndProc( HWND , UINT, WPARAM, LPARAM );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPreIns,  LPTSTR lpCmdLine, int nCmdShow)//参数中LPTSTR改为PSTR才能编译通过
{
    if(!initWindow(hInstance))
        return false;
    MSG msg;
    ZeroMemory(&msg, sizeof(msg)); //这条语句是干什么用的?

    while(msg.message != WM_QUIT)
    {
        while(GetMessage(&msg, wndHandle, 0 , 0))//随书源码中wndHandle为NULL,而教程上则wndHandle,这有什么区别么?
        {
            TranslateMessage(&msg );
            DispatchMessage( &msg );
        }
    }

    return (int)msg.wParam;
}

bool initWindow(HINSTANCE hInstance)
{
    WNDCLASSEX wc;

    wc.cbSize = sizeof(wc);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = 0;
    wc.hCursor = LoadCursor( NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "Directx Example"; //必须加入(_T)强制转化该字符串
才能编译通过(我也不知道这样强制转化是不是会产生其他问题)
    wc.hIconSm = 0;

    RegisterClassEx(&wc);

    hIns = hInstance;

    wndHandle = CreateWindow(
        "DirectX Example", //同上
        "DirectX Example", //同上
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        640,
        480,
        NULL,
        NULL,
        hInstance,
        NULL);

    if(!wndHandle)
        return false;

    ShowWindow(wndHandle, SW_SHOW);
    UpdateWindow(wndHandle);
    return true;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    }

    return DefWindowProc( hWnd, message, wParam, lParam );
}

在我自己的初步修改下,程序能正常编译通过,但运行时无任何反应,没有出现窗口。我不知道哪里出现错误,刚开始学习winAPI,很多地方不了解,望大鸟指教,不胜感激。(同时,感谢每位看完代码的读者,辛苦您的眼睛了, :-) )
经过几个小时的“奋战”,发现在作出上述修改后过不了RegisterClassEx,为什么会这样?无论我怎么修改注册类名称。