Windows系统下,设置使用 SetPixel() 函数的相关环境

Windows系统下,设置使用 SetPixel() 函数的相关环境

课程设计作业要求使用SetPixel()函数自制绘图图形库,但是想要使用这个绘图函数,还需要知道Windows复杂的句柄知识。

所以,为了专注于绘图库的开发,而不是浪费时间在复杂的Windows句柄上,本文特意提供一个模板,可以直接使用SetPixel()函数。

源代码:

#include <Windows.h> 

#define TITLE_NAME "尝试"
#define WIN_WIDTH   800
#define WIN_HEIGHT  400

// 窗口过程函数原型  
//      HWND hwnd,              handle to window  
//      UINT uMsg,              message identifier  
//      WPARAM wParam,          first message parameter  
//      LPARAM lParam           second message parameter  
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

// 我的绘图任务函数
//      hdc                     传入的hdc参数
void MY_PAINT_MISSION(HDC hdc);

// 窗口主函数,相当于 DOS 下的main函数  
//      HINSTANCE hInstance,        handle to current instance  
//      HINSTANCE hPrevInstance,    handle to previous instance  
//      LPSTR lpCmdLine,            pointer to command line  
//      int nCmdShow                show state of window  
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASS wcs;
    wcs.cbClsExtra = 0;                                         // 窗口类附加参数  
    wcs.cbWndExtra = 0;                                         // 窗口附加参数  
    wcs.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    // 窗口DC背景  
    wcs.hCursor = LoadCursor(hInstance, IDC_CROSS);             // 鼠标样式  
    wcs.hIcon = LoadIcon(NULL, IDI_WINLOGO);                    // 窗口icon  
    wcs.hInstance = hInstance;                                  // 应用程序实例  
    wcs.lpfnWndProc = WindowProc;
    wcs.lpszClassName = TITLE_NAME;
    wcs.lpszMenuName = NULL;
    wcs.style = CS_VREDRAW | CS_HREDRAW;
    RegisterClass(&wcs);
    HWND hWnd;
    hWnd = CreateWindow(TITLE_NAME, TITLE_NAME, WS_OVERLAPPEDWINDOW, 0, 0, WIN_WIDTH, WIN_HEIGHT, NULL, NULL, hInstance, NULL);
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    MSG msg;

    // hdc init
    HDC hdc = GetDC(hWnd);

    // 绘图
    MY_PAINT_MISSION(hdc);

    // 消息循环  
    while (GetMessage(&msg, 0, NULL, NULL)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    // release
    ReleaseDC(hWnd, hdc);
    return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
    case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
        break;
    }
    return 0;
}

// 此处为绘图任务内容
void MY_PAINT_MISSION(HDC hdc) {
    SetPixel(hdc, 400, 400, RGB(1, 1, 1));
    SetPixel(hdc, 200, 200, RGB(255, 0, 0));
}

运行结果如图所示:

result

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值