sinawear

导航

ANSI和UNICODE交叉.

/* re.h
#define UNICODE
#include <windows.h>
*/

/*net_net.h
#include <windows.h>
void net_fuc();
*/

/*net_net.cpp
#include "net_net.h"
void net_fuc()
{
::MessageBox(NULL, "net", "net",NULL);
}
*/

// UNICODE,我们在调用API的时候,UNICODE宏放在<windows.h>上才起作用
// 最上面的头文件用的是UNICODE,windows.h有防止重复包含的宏
// net_net.h中的windows.h在Winmain文件中不会再包含,所以该文件将调用WindowsW的函数
// net_net.cpp中包含头文件,windows.h起作用了,所以net_net.cpp文件将调用WindowsA的函数。

#include "re.h" //UNICODE
#include "net_net.h" //ANSI

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
     // TODO: Place code here.

    ::MessageBox(NULL, L"!", L"!", NULL);

    return 0;
}

 

//是不是很有意思。
/*
1)如果有文件在最前面include "re.h",那么它将调用WindowW函数。
2)如果有文件在最前面include "net_net.h",那么它将调用WindowsA函数。

在第一种情况里创建窗口:
    Windows.create(..., WndProc);

在第二种情况里写窗口过程:
LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)                            
{
    switch(uMsg)
    {   
    case WM_CLOSE:
        {
            PostQuitMessage(0);   
        }
        break;   
    }
    return DefWindowProc (hwnd, uMsg, wParam, lParam) ;
}

创建窗口用的WindowW函数,处理窗口过程呢用的是WindowA函数。
将会出现什么错误呢,窗口的标题显示乱码。因为注册用的UNICODE,发送处理接受的是ANSI。
*/

posted on 2012-05-11 16:13  sinawear  阅读(167)  评论(0编辑  收藏  举报