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。
*/