新建一个32空程序,在里面新建一个.cpp文件。然后把下面的代码考进去,运行就会起来一个窗口。你仔细看看这个吧,我自己写了,有注释。
/////////////////////////////////////////////////////////win.cpp///////////////////////////////////////////////////////////////////
#include <windows.h>
#include "stdio.h"
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
//消息处理函数原形
bool g_btxt = false;
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char *szClassName = "WndClass";
WNDCLASSEX wndclass; //用描述主窗口的参数填充WNDCLASSEX 结构
wndclass.cbSize = sizeof(wndclass); //定义结构的大小
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; //定义窗口样式
wndclass.lpfnWndProc = WndProc; //指定本窗口的消息处理函数
wndclass.cbClsExtra = 0; //没有额外的类内存
wndclass.cbWndExtra = 0; //没有额外的窗口内存
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //使用默认的图标
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); //使用默认的光标
wndclass.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); //定义窗口的背景颜色为灰色
wndclass.hInstance = hInstance; //实例句柄
wndclass.lpszClassName = szClassName; //窗口类名称
wndclass.lpszMenuName = NULL; //不使用菜单
wndclass.hIconSm = NULL; //没有类的小图标
//注册窗口类
::RegisterClassEx(&wndclass);
//创建主窗口
HWND hwnd = ::CreateWindowEx(0, //不定义扩展样式
szClassName, //类名
"Hello world", //窗口标题
WS_OVERLAPPEDWINDOW, //窗口风格
CW_USEDEFAULT, //默认的窗口X 轴坐标
CW_USEDEFAULT, //默认的窗口Y 轴坐标
CW_USEDEFAULT, //默认的窗口宽度
CW_USEDEFAULT, //默认的窗口高度
NULL, //没有父窗口句柄
NULL, //没有菜单句柄
hInstance, //程序实例句柄
NULL); //没有用户数据
if(hwnd == NULL)
{
::MessageBox(NULL,"创建窗口出错","error",MB_ICONHAND);
return -1;
}
::ShowWindow(hwnd,nCmdShow); //显示窗口
::UpdateWindow(hwnd); //刷新窗口客户区
MSG msg;
while(::GetMessage(&msg,NULL,0,0)) //从消息队列中取出消息,交给消息处理函数处理,直到GetMessage 函数返回FALSE ,结束消息循环
{
::TranslateMessage(&msg); //转化键盘消息
::DispatchMessage(&msg); //将消息发送给消息处理函数
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
char *szText = "My first window process ";
HDC hdc; //声明设备环境句柄
PAINTSTRUCT ps;
switch(msg)
{
case WM_PAINT: //窗口客户区需要重画
{
if (g_btxt == false)
{
hdc = ::BeginPaint(hwnd,&ps); //使无效的客户区变得有效,并取得设备环境句柄
::TextOut(hdc,0,0,szText,strlen(szText));
::EndPaint(hwnd,&ps);
g_btxt = true;
}
return 0;
}
case WM_DESTROY: //正在销毁窗口
{
::PostQuitMessage(0); //向消息队列投递一个WM_QUIT 消息,促使GetMessage 函数返回0,结束消息循环
return 0;
}
case WM_KEYDOWN:
switch (wParam)
{
case VK_ESCAPE:
PostMessage(hwnd, WM_QUIT, 0, 0);
break;
}
break;
case WM_LBUTTONDOWN:
UINT x, y;
LPSTR info = new char[50];
x = LOWORD(lParam);
y = HIWORD(lParam);
sprintf(info, "%d_%d", x, y);
MessageBox(hwnd, info, "mouse info", MB_OK);
delete info;
break;
}
return ::DefWindowProc(hwnd,msg,wParam,lParam); // 将我们不处理的消息交给系统做默认处理
}
///////////////////////////////////////////////////////////////////////////////
运行后效果:
if( !RegisterClass( &wndclass))
{
MessageBeep(0) ;
return FALSE ;
}
HWND CreateWindow //创建窗口类
(
LPCTSTR lpszClassName,//窗口实例的类的名字
LPCTSTR lpszTitle, //窗口标题名
DWORD dwStyle, //新创建的窗口的样式(后面将会详细介绍)
int x, //窗口左上角的横坐标
int y, //窗口左上角的纵坐标
int nWidth, //窗口的宽度
int nHeight, //窗口的高度
HWND hwndParent, //该窗口的父窗口的句柄
HMENU hMenu, //窗口主菜单句柄
HINSTANCE hInstance, //创建窗口的应用程序当前句柄
LPVOID lpParam //指向一个传递给窗口的参数值的指针
)
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
//定义一个窗口类,并填充必要的信息
WNDCLASS winclass;
HWND hwnd;
MSG msg;
HDC hdc;
PAINTSTRUCT ps;
winclass.style =CS_DBLCLKS|CS_OWNDC|
CS_HREDRAW|CS_VREDRAW;
winclass.lpfnWndProc=WindowProc;
winclass.cbClsExtra =0;
winclass.cbWndExtra =0;
winclass.hInstance =hinstance;
winclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
winclass.hCursor =LoadCursor(NULL,IDC_ARROW);
winclass.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszClassName =WINDOW_CLASS_NAME;
winclass.lpszMenuName =NULL;
//注册刚才定义的窗口类
if(!RegisterClass(&winclass))
return 0;
//创建注册成功的窗口
if(!(hwnd=CreateWindow(WINDOW_CLASS_NAME,
"WIN3D Game Console",
WS_POPUP|WS_VISIBLE,
0,0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
NULL,
NULL,
hinstance,
NULL)))
return 0;
最后显示窗口。