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));
}
运行结果如图所示: