Windows窗口框架(API入门一)

本文提供了一个基于Windows API的绘图示例程序,演示了如何使用各种绘图函数如LineTo、Polyline、Arc等来绘制不同的图形。此外,还介绍了如何通过消息循环处理WM_PAINT、WM_DESTROY等消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#include <windows.h>
#include <stdlib.h>
#include <string.h>

//声明函数
//////////////////////////////////////////////////////////////////
long WINAPI WndProc                                //消息处理函数
            (
            HWND hWnd,
            UINT iMessage,
            UINT wParam,
            LONG lParam
            );
BOOL InitWindowsClass(HINSTANCE hInstance);         //初始化窗口类
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);//初始化窗口
///////////////////////////////////////////////////////////////////
HWND hWndMain;


int WINAPI WinMain (                            //主函数
                    HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine,
                    int nCmdShow
                    )

{
    MSG Message;
    if(!InitWindowsClass(hInstance))
       return FALSE;
    if(!InitWindows(hInstance, nCmdShow))
       return FALSE;
    while(GetMessage(&Message,0,0,0))//消息循环
    {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }
    return Message.wParam;
}


//定义函数
///////////////////////////////////////////////////////////////////
long WINAPI WndProc(
                    HWND hWnd,
                    UINT iMessage,
                    UINT wParam,
                    LONG lParam
                    )
{
    HDC hDC;
    HBRUSH hBrush;
    HPEN hPen;
    PAINTSTRUCT PtStr;
    POINT points[6]={{100,212},{70,227},{70,250},{130,250},{130,227},{100,212}};
   
    switch(iMessage)
    {
        case WM_PAINT:
            hDC=BeginPaint(hWnd,&PtStr);
            hPen=(HPEN)GetStockObject(NULL_PEN);
            SelectObject(hDC,hPen);
            hBrush=(HBRUSH)GetStockObject(BLACK_BRUSH);
            SelectObject(hDC,hBrush);
            LineTo(hDC,50,50);
            DeleteObject(hPen);
            hPen=CreatePen(PS_SOLID,2,RGB(255,0,0));
            SelectObject(hDC,hPen);
           
            LineTo(hDC,150,50);
            LineTo(hDC,100,137);
            LineTo(hDC,50,50);
            Polyline(hDC,points,6);
            Arc(hDC,63,137,138,212,100,137,100,137);
            Pie(hDC,213,137,288,212,240,137,260,137);
            Rectangle(hDC,213,212,287,250);
            RoundRect(hDC,213,100,287,137,20,20);
            DeleteObject(hPen);
            DeleteObject(hBrush);
            EndPaint(hWnd,&PtStr);
            return 0;
        case WM_DESTROY:
            PostQuitMessage(0);
                 return 0;
            default:
                 return(DefWindowProc(hWnd,iMessage,wParam,lParam));
                
           
    }
}


BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{
    HWND hWnd;
    hWnd=CreateWindow("WinFill",    //窗口类名
                     "填充示例",    //窗口实例的标题名
                     WS_OVERLAPPEDWINDOW, //窗口风格
                     CW_USEDEFAULT, //窗口左上角坐标为默认值
                     0,
                     CW_USEDEFAULT, //窗口的高为默认值
                     0,             //宽
                     NULL,          //无父窗口
                     NULL,          //无主菜单
                     hInstance,     //创建此窗口的应用程序的当前句柄
                     NULL           //不使用该值 
                     );
    if(!hWnd)
       return FALSE;
   // hWndMain=hWnd;
   
    ShowWindow(hWnd,nCmdShow); //显示窗口
    UpdateWindow(hWnd); //绘制用户区
    return TRUE;
                    
}


BOOL InitWindowsClass(HINSTANCE hInstance)
{
    WNDCLASS WndClass;
    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hIcon=LoadIcon(NULL,"END");
    WndClass.hInstance=hInstance;
    WndClass.lpfnWndProc=WndProc;
    WndClass.lpszClassName="WinFill";
    WndClass.lpszMenuName=NULL;
    WndClass.style=CS_HREDRAW|CS_VREDRAW;
    return RegisterClass(&WndClass);
   
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值