窗口实战!

记得! 窗口回掉要return默认函数。


    
#include <tchar.h>
#include <windows.h>
#include<stdbool.h>
#include<stdio.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT uMsg/*消息类型*/, WPARAM wParam, LPARAM lParam) //后两个参数是消息的详细信息
{
    switch(uMsg)
    {
    case WM_COMMAND:
    {
        MessageBox(hWnd,"天助死亡成功!","啊!!!",0);               //还可以使用child-window identifier 标记控件,wParam的低十六位记录了identifier。
        return 0;
    }
   case WM_KEYDOWN:                          //各种各样的宏定义等你去查,有一个宏定义可以专门接受字符
        {
            MessageBox(0,0,0,0);
            return 0;
        }
    case WM_CHAR:                          //各种各样的宏定义等你去查,有一个宏定义可以专门接受字符
        {
            char ch[2];
            ch[0] = wParam;
            ch[1] = '\0';
            MessageBox(hWnd,ch,"天助",0);
            return 0;
        }

    }

    return DefWindowProc(hWnd, uMsg, wParam, lParam);                      //这里的返回要返回这个默认窗口,不
}

int WINAPI WinMain (HINSTANCE hThisInstance,              //此参数为模块的起始地址
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
    //定义窗口类,这个类里面有些东西要初始化
    WNDCLASS wndclass;
    ZeroMemory(&wndclass,sizeof(wndclass));
    wndclass.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;
    wndclass.lpfnWndProc = WindowProcedure;
    wndclass.lpszClassName = "123";
    wndclass.hInstance = hThisInstance;
    RegisterClass(&wndclass);   //注册窗口类

    //创建窗口并显示窗口
    HWND hwnd;
    char debug[80];
    hwnd = CreateWindow("123",
                 "天助的第一个窗口",
                 WS_OVERLAPPEDWINDOW,
                  10,
                  10,
                  800,
                  500,
                  NULL,
                  NULL,
                  hThisInstance,
                  NULL);

        if(hwnd == NULL)            //窗口创建失败
        {
            printf("CreateWindow Error=%d",GetLastError());
            return 0;
        }

        CreateWindow("EDIT",                     //这是函数自带的控件
                 "",                             //文本框本身就没有名字
                 WS_CHILD|WS_VISIBLE,             //子窗口与可视,创建控件必选的两项,位与,懂意思吧。
                  10,                               //以父窗口为(0,0)
                  10,
                  400,
                  250,
                  hwnd,
                  NULL,
                  hThisInstance,
                  NULL);

        CreateWindow("BUTTON",                     //这是函数自带的控件
                 "死亡",                             //文本框本身就没有名字
                 WS_CHILD|WS_VISIBLE,             //子窗口与可视,创建控件必选的两项,位与,懂意思吧。
                  700,                               //以父窗口为(0,0)
                  100,
                  50,
                  50,
                  hwnd,
                  NULL,
                  hThisInstance,
                  NULL);
        CreateWindow("BUTTON",                     //这是函数自带的控件
                 "选择",                             //文本框本身就没有名字
                 WS_CHILD|WS_VISIBLE,             //子窗口与可视,创建控件必选的两项,位与,懂意思吧。
                  650,                               //以父窗口为(0,0)
                  100,
                  50,
                  50,
                  hwnd,
                  NULL,
                  hThisInstance,
                  NULL);
        CreateWindow("BUTTON",                     //这是函数自带的控件
                 "天助",                             //文本框本身就没有名字
                 WS_CHILD|WS_VISIBLE,             //子窗口与可视,创建控件必选的两项,位与,懂意思吧。
                  600,                               //以父窗口为(0,0)
                  100,
                  50,
                  50,
                  hwnd,
                  NULL,
                  hThisInstance,
                  NULL);
        ShowWindow(hwnd,SW_SHOW);


        //消息处理
        MSG msg;
        BOOL ret;
        ZeroMemory(&msg,sizeof(msg));
        while((ret = GetMessage(&msg,hwnd,NULL,NULL)) != 0)         //第二个参数可以填NULL 表示所有窗口的信息我都要
        {
            if(ret == -1)          //程序出现问题
            {
                sprintf(debug,"Getmessage Error=%d",GetLastError());
                OutputDebugString(debug);                 //因为没有控制台  只能采用这种方式打印错误
                return 0;
            }
            else
            {
                TranslateMessage(&msg);                     //当你要读取键盘输入时,要使用此函数配合WM_CHAR
                DispatchMessage(&msg);                       //将消息分发给窗口对象,由窗口对象调用窗口回调函数处理消息。
            }
        }


}


写这种东西好像挺有意思的。加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值