龙骑士传六星英雄:用Win32 application建立窗体_入门

来源:百度文库 编辑:九乡新闻网 时间:2024/04/25 02:03:24
大致说来windows编程有两种方法: 1.windwos c方式(SDK), 2.c++方式:即对SDK函数进行包装,如VC的MFC,BCB的OWL等,如果要深入 下去,还是要熟悉SDK。 建立一个简单的窗体有如下步骤:

HINSTANCE hInst; // 当前实例句柄
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);// 回调函数

//在此加入全局变量、常量、函数、类等,供回调函数使用
/* * 主函数: int WINAPI WinMain(HANDLE, HANDLE, LPSTR, int) 初始化窗口,注册窗口,处理消息循环 **/
int WINAPI WinMain(                  //WINAPI也可用APIENTRY代替
HINSTANCE hInstance, /**当前实例句柄**/  HINSTANCE hPrevInstance,// 前一个实例句柄
LPSTR                    lpCmdLine,/**命令行字符串**/ int                            nCmdShow  // 窗口显示方式
)

/** 回调函数: MainWndProc(HWND, UINT, WPARAM, LPARAM) 处理窗口消息,执行有关代码  **/
LRESULT CALLBACK MainWndProc(
HWND                         hWnd,          /* 窗口句柄 */ UINT                            message,   /* 消息类型 */
WPARAM                   wParam,  /* 附加信息 */  LPARAM                     lParam)    /* 附加信息 */
 以下是一个实例:

#include
#include

HWND hWnd=NULL; // 保存 Windows 分配给程序的窗口句柄,它是全局的

LRESULT APIENTRY MainWndProc(HWND,UINT,WPARAM,LPARAM);
void MyMsgLoop();

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    char clsName[]="myWnd";
    WNDCLASS wc;  //创建一个Windows窗体
    wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;// 窗体风格
    wc.lpfnWndProc = MainWndProc; //   窗体进程的指针
    wc.cbClsExtra = 0L;
    wc.cbWndExtra = 0L;
    wc.hInstance = hInstance;// 窗体进程实例的句柄,通过WinMain主函数传递进来
    wc.hIcon = NULL;
    wc.hCursor = NULL;
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);// 背景画刷,也就是窗口显示背景颜色
    wc.lpszMenuName = NULL;
    wc.lpszClassName = clsName;// 注册的Windows类名称

    RegisterClass(&wc);//调用RegisterClass函数进行注册
    / /具备了创建一个窗体的信息,开始调用API函数CreateWindow来进行窗体的创建工作
    hWnd = CreateWindow(clsName,"主窗口",
       WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
       100, 100,400, 300,NULL,NULL,hInstance,NULL); // 创建窗口
    ShowWindow( hWnd, SW_SHOWDEFAULT ); // 显示窗口
    UpdateWindow( hWnd );   // 刷新窗口
   //UpdateWindow函数用于更新窗口,该函数更新窗口的时候会向指定的窗体的进程发送消息,如果被更新的客户区为空,说明窗体没有接收到消息。
    MyMsgLoop();     // 进入消息循环
    return 0;
}

LRESULT APIENTRY MainWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam )
{// 消息处理
    switch(message) 
    {
     case WM_CREATE:  // 当收到建立窗口的消息时,进行处理...
        return 0;
        break;
     case WM_CLOSE:  // 当收到关闭窗口的消息时,进行处理...
        MessageBox(NULL,"窗口要关闭了","消息提示",MB_OK|MB_ICONEXCLAMATION); 
        PostQuitMessage(0);
        return 0;
        break;
     case WM_DESTROY: // 当退出消息的时候,进行处理...
        MessageBox(NULL,"退出消息了","消息提示",MB_OK|MB_ICONEXCLAMATION); 
        PostQuitMessage(0);
        return 0;
        break;
      default:
      break;
    }
    return (DefWindowProc(hWnd, message, wParam, lParam));
}

void MyMsgLoop()

    MSG msg; 
    BOOL receiveMessage;
    PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
    while(msg.message != WM_QUIT) 
    { // 消息循环
       receiveMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
       if(receiveMessage) 
       { // 有消息
        TranslateMessage(&msg);
        DispatchMessage(&msg);
       }
    }
}