幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3263|回复: 5

[游戏编程] 一个简单的窗体测试……

[复制链接]

121

主题

3186

帖子

2万

积分

管理员

お嬢様

Rank: 9Rank: 9Rank: 9

积分
22410
发表于 2010-1-22 00:24:08 | 显示全部楼层 |阅读模式
#include <windows.h>
#include<iostream>
using namespace std;
//-----------------------------------------------------------------------------
// Name: MsgProc()
// Desc: The window&#39;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[64];
    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&#39;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难学多了= =.
正在啃DX  ing.

这个代码 演示了一般窗口绘制。
有键盘(热键)鼠标 单击和移动事件(消息)的几个触发实例。

应该算是最省最省的代码了以后慢慢来= =学习道路好长……
回复

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2010-1-22 12:08:48 | 显示全部楼层
呵呵,对于写游戏来说,用winapi的地方主要就是个窗口。

哦,对了,那个消息循环我喜欢用这种写法。
  1. for(;;)
  2. {
  3. &#160;&#160; if(PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE))
  4. &#160;&#160;&#160;&#160;{
  5. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (msg.message==WM_QUIT)
  6. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
  7. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;
  8. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
  9. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else
  10. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
  11. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TranslateMessage(&amp;msg);
  12. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DispatchMessage(&amp;msg);
  13. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;continue;
  14. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
  15. &#160;&#160;&#160;&#160;}
  16. }
复制代码
至少是在我的机子上,如果用GetMessage的这种写法,创建窗口时,总是会让鼠标的光标短时间内变成沙漏的形状,会让人觉得这程序是不是在后台干什么构当了,很郁闷的感觉。
え~え~お!!!
回复 支持 反对

使用道具 举报

121

主题

3186

帖子

2万

积分

管理员

お嬢様

Rank: 9Rank: 9Rank: 9

积分
22410
 楼主| 发表于 2010-1-23 00:37:52 | 显示全部楼层
引用第1楼shawind于2010-01-22 12:08发表的  :
至少是在我的机子上,如果用GetMessage的这种写法,创建窗口时,总是会让鼠标的光标短时间内变成沙漏的形状,会让人觉得这程序是不是在后台干什么构当了,很郁闷的感觉。
.......

么错,用GetMessage会稍卡一些~
有更好的方法推荐么

回复 支持 反对

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
发表于 2010-1-26 13:10:04 | 显示全部楼层
循环其实可以用while(GetMessage(&amp;msg)){}的……
我认为还是这样好点
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复 支持 反对

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
发表于 2010-3-28 15:17:59 | 显示全部楼层
二楼写错了吧?
应该是 msg.wParam == WM_QUIT吧?
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复 支持 反对

使用道具 举报

1

主题

5

帖子

167

积分

③业余

积分
167
QQ
发表于 2010-4-5 15:40:30 | 显示全部楼层
DX10的话是推荐这样做的

  1. MSG msg = {0};
  2. while( WM_QUIT != msg.message )&#160;
  3. {&#160;
  4. if( PeekMessage( &amp;msg, NULL, 0, 0, PM_REMOVE ) )&#160;
  5. {&#160;
  6. TranslateMessage( &amp;msg );&#160;
  7. DispatchMessage( &amp;msg );&#160;
  8. }&#160;
  9. else&#160;
  10. {&#160;
  11. Render();  // Do some rendering&#160;
  12. }&#160;
  13. }
复制代码
[7Y]七曜石动漫社:109184857
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-19 23:24 , Processed in 0.024513 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表