一个简单的窗体测试……
#include <windows.h>#include<iostream>
using namespace std;
//-----------------------------------------------------------------------------
// Name: MsgProc()
// Desc: The window's message handler
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps;
HDC hdc;
int intX = HIWORD(lParam);
int intY = LOWORD(lParam);
char temp;
switch( msg )
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
case WM_MOUSEMOVE:
sprintf(temp,"X:%d,Y:%d",intX,intY);
SetWindowText(hWnd,temp);
break;
case WM_LBUTTONDOWN:
MessageBox(hWnd,"左键测试","标题",MB_OK);
break;
case WM_KEYDOWN:
{
switch(wParam)
{
case VK_F4:
{
MessageBox(hWnd,"F4测试","标题",MB_OK);
}
break;
}
}
break;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
// Register the window class
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL,
"Tutorial", NULL };
RegisterClassEx( &wc );
// Create the application's window
HWND hWnd = CreateWindow( "Tutorial", "纯净窗口",
WS_OVERLAPPEDWINDOW, 100, 100, 800, 600,
NULL, NULL, wc.hInstance, NULL );
// Show the window
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
// Enter the message loop
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnregisterClass( "Tutorial", wc.hInstance );
return 0;
}
=======================分割线====================
学了2个月才这么点东西……
底层的东西确实麻烦些,比起JAVA难学多了= =.
正在啃DXing.
这个代码 演示了一般窗口绘制。
有键盘(热键)鼠标 单击和移动事件(消息)的几个触发实例。
应该算是最省最省的代码了以后慢慢来= =学习道路好长…… 呵呵,对于写游戏来说,用winapi的地方主要就是个窗口。
哦,对了,那个消息循环我喜欢用这种写法。
for(;;)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (msg.message==WM_QUIT)
{
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
continue;
}
}
}
至少是在我的机子上,如果用GetMessage的这种写法,创建窗口时,总是会让鼠标的光标短时间内变成沙漏的形状,会让人觉得这程序是不是在后台干什么构当了,很郁闷的感觉。 引用第1楼shawind于2010-01-22 12:08发表的:
至少是在我的机子上,如果用GetMessage的这种写法,创建窗口时,总是会让鼠标的光标短时间内变成沙漏的形状,会让人觉得这程序是不是在后台干什么构当了,很郁闷的感觉。
.......
么错,用GetMessage会稍卡一些~
有更好的方法推荐么
循环其实可以用while(GetMessage(&msg)){}的……
我认为还是这样好点 二楼写错了吧?
应该是 msg.wParam == WM_QUIT吧? DX10的话是推荐这样做的
MSG msg = {0};
while( WM_QUIT != msg.message )
{
if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
Render();// Do some rendering
}
}
页:
[1]