C++画矩形

#include<windows.h>
HINSTANCE g_hInstance=0;//全局窗口句柄变量


//画图函数
void Onpen(HWND hWnd)
{
    
    PAINTSTRUCT ps = {0};
    HDC hdc = BeginPaint(hWnd,&ps);

    // 创建画笔
    HPEN hPen = CreatePen(PS_DASH,1,RGB(0,0,255));
    // 应用到DC中
    HGDIOBJ nOldPen = SelectObject(hdc,hPen);

    // 绘图
    // 绘制点(圆心)
    //SetPixel(hdc,350,250,RGB(255,0,0));

    HGDIOBJ hBrush = GetStockObject(NULL_BRUSH);
    HGDIOBJ nOldBrush = SelectObject(hdc,hBrush);
    // 绘制矩形
    Rectangle(hdc,0,0,200,800);
    
    


    SelectObject(hdc,nOldPen);
    DeleteObject(hPen);
    //DeleteObject(hPen2);

    EndPaint(hWnd,&ps);

}

/*
 2 窗口处理函数(用户自定义 处理消息)
*/


LRESULT CALLBACK WndProc(HWND hWnd,UINT msgID,
          WPARAM wParam, LPARAM lParam)
{
    switch(msgID)
    {
    case WM_PAINT:
        Onpen(hWnd);
        break;
    case WM_DESTROY:
        //使得GetMessage返回0
        PostQuitMessage(0);
        break;
    }
    //给各种消息做默认处理
    return DefWindowProc(hWnd,msgID,wParam,lParam);
}


/*
  3 注册窗口类
*/

void Register(LPSTR lpClassName,WNDPROC wndPrco)
{
    //注册窗口的结构体
    WNDCLASSEX wce={0};
    //cbSize WNDCLASSEX的大小
    wce.cbSize=sizeof(wce);
    /*
    windows程序为每一个窗口设计类管理一个WNDCLASS结构.
    在应用程序注册一个窗口类的时候,可以让windows分配一定字节空间的内存,
    这部分内存成为类的附件内存,有属于这个窗口类的所有窗口共享,
    类附件内存信息用于存储窗口类的附加信息。windows系统将这部分内存初始化为0,
    因此我们经常设置此参数为0.
    */
    wce.cbClsExtra=0;
    /*
    windows程序为每一个窗口管理一个内部数据结构,在注册窗口类的时候,
    系统可以为每一个窗口分配一定的字节数的附加内存空间,称为窗口附件内存。
    应用程序可使用这部分内存存储窗口特有的数据,
    windows系统把这部分内存初始化为0.
    */
    wce.cbWndExtra=0;
    //主窗口的背景颜色的设置
    wce.hbrBackground=CreateSolidBrush(RGB(220,200,220));
    //光标句柄
    wce.hCursor=NULL;
    /*
    hIconSm是窗口标题栏的图标,hIcon是应用程序的图标
    */
    //图标的句柄
    wce.hIcon=NULL;
    wce.hIconSm=NULL;
    //全局变量句柄的赋值
    wce.hInstance=g_hInstance;
    //消息处理的过程
    wce.lpfnWndProc=WndProc;
    //窗口类的名称
    wce.lpszClassName=lpClassName;
    //窗口菜单资源名称
    wce.lpszMenuName=NULL;
    //窗口的风格
    wce.style=CS_HREDRAW|CS_VREDRAW;
    //该函数为随后在调用Createwindow函数和CreatewindowEx函数中使用的窗口注册一个窗口类。
    RegisterClassEx(&wce);
}


/*
4 创建窗口
*/
HWND CreateMain(LPSTR lpClassName,LPSTR lpWndName)
{
    //创建窗口函数
    HWND hWnd=CreateWindowEx(0,lpClassName,lpWndName,WS_OVERLAPPEDWINDOW,
        100,100,700,500,NULL,NULL,g_hInstance,NULL);
    return hWnd;
}

/*
5 显示窗口
*/
void Display(HWND hWnd)
{
    //显示窗口
    ShowWindow(hWnd,SW_SHOW);
    //更新操作
    UpdateWindow(hWnd);
}


/*
6 消息循环
*/
void Message()
{
    MSG nMsg={0};
    while(GetMessage(&nMsg,NULL,0,0))
    {
        TranslateMessage(&nMsg);
        DispatchMessage(&nMsg);
    }
}


/*
1 WinMain函数
*/
int CALLBACK WinMain(HINSTANCE hIns,HINSTANCE hPreIns,
     LPSTR lpCmdLine,int nCmdShow)
{
    //当前句柄的一个实例
    g_hInstance=hIns;
    //注册窗口类
    Register("Main",WndProc);
    //创建窗口
    HWND hWnd=CreateMain("Main","window");
    //显示窗口
    Display(hWnd);
    //消息循环
    Message();
}

猜你喜欢

转载自blog.csdn.net/d123454545/article/details/81511597