windows编程之简单的画图操作

原创 2013年12月03日 18:04:00

利用windows api可以画一些简单的图形;这涉及到GDI、画笔、画刷的一些简单操作。

示例代码如下:

// test.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include <stdio.h>

LRESULT CALLBACK WndProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

void paintLine(HWND hwnd);
void paintRectangle(HWND hwnd);
void paintElipse(HWND hwnd);

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
	WNDCLASS wndclass;

	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wndclass.hInstance = hInstance;
	wndclass.lpfnWndProc = WndProc;
	wndclass.lpszClassName = "我的窗口";
	wndclass.lpszMenuName = NULL;
	wndclass.style = CS_HREDRAW | CS_VREDRAW;
	RegisterClass(&wndclass); //注册窗口类

	HWND hwnd;
	hwnd = CreateWindow("我的窗口", "窗口", WS_OVERLAPPEDWINDOW, 
		0, 0, 640, 480, NULL, NULL, hInstance, NULL);

	ShowWindow(hwnd, SW_SHOWNORMAL);
	UpdateWindow(hwnd);

	MSG Msg;
	while(GetMessage(&Msg, NULL, 0, 0))
	{
		TranslateMessage(&Msg); 
        DispatchMessage(&Msg);
		paintLine(hwnd);
		paintRectangle(hwnd);
		paintElipse(hwnd);
	}

	return 0;
}

void paintLine(HWND hwnd)
{
	PAINTSTRUCT ptStr;
	HPEN hpen;
	HDC hdc;
	hdc = GetDC(hwnd);
	hpen = (HPEN)GetStockObject(WHITE_PEN);
	SelectObject(hdc, hpen);
	DeleteObject(hpen);
	LineTo(hdc, 100, 100);
	EndPaint(hwnd, &ptStr);
	ReleaseDC(hwnd, hdc);
}

void paintRectangle(HWND hwnd)
{
	PAINTSTRUCT ptStr;
	HPEN hpen;
	HBRUSH hbrush;
	HDC hdc;
	hdc = GetDC(hwnd);
	hpen = (HPEN)GetStockObject(WHITE_PEN);
	hbrush = (HBRUSH)GetStockObject(BLACK_BRUSH);
	SelectObject(hdc, hpen);
	SelectObject(hdc, hbrush);
	Rectangle(hdc, 100, 100, 200, 200);
	DeleteObject(hpen);
	DeleteObject(hbrush);
	EndPaint(hwnd, &ptStr);
	ReleaseDC(hwnd, hdc);

}

void paintElipse(HWND hwnd)
{
	PAINTSTRUCT ptStr;
	HPEN hpen;
	HBRUSH hbrush;
	HDC hdc;
	hdc = GetDC(hwnd);
	hpen = (HPEN)GetStockObject(WHITE_PEN);
	hbrush = (HBRUSH)GetStockObject(BLACK_BRUSH);
	SelectObject(hdc, hpen);
	SelectObject(hdc, hbrush);
	Ellipse(hdc, 200, 200, 280, 280);
	DeleteObject(hpen);
	DeleteObject(hbrush);
	EndPaint(hwnd, &ptStr);
	ReleaseDC(hwnd, hdc);
}

LRESULT CALLBACK WndProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
	switch(uMsg)
	{
	case WM_CHAR:
		char strChar[20];
		sprintf(strChar, "char is %d", wParam);
		MessageBox(hwnd, strChar, "window", MB_OK);
		break;

	case WM_LBUTTONDOWN:
		MessageBox(hwnd, "mouse left-click", "window", MB_OK);
		HDC hdc;
		hdc = GetDC(hwnd);
		TextOut(hdc, 0, 250, "hello mouse left-click", strlen("hello mouse left-click"));
		ReleaseDC(hwnd, hdc);
		break;


	case WM_RBUTTONUP:
		MessageBox(hwnd, "release mouse", "window", MB_OK);
		hdc = GetDC(hwnd);
		TextOut(hdc, 0, 300, "hello release mouse", strlen("hello release mouse"));
		ReleaseDC(hwnd, hdc);
		break;

	
	
	case WM_CLOSE:
		DestroyWindow(hwnd);
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
	break;

default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;}


总结:

感觉这些画图主要就是对画笔和画刷进行操作,再加上与图形设备接口相关的一些处理。

三. 简单绘图--Windows编程课程学习笔记

三. 简单绘图--Windows编程课程学习笔记
  • ling_xiao007
  • ling_xiao007
  • 2016年06月20日 15:20
  • 385

windows程序设计(6):基本画图

windows程序画图,大体上有3种方法: (1)你告诉系统点的坐标和颜色,系统通过SetPixel来画。类似的,通过GetPixel来获取某一点像素值。 (2)使用MoveToEx、LineTo...
  • thefutureisour
  • thefutureisour
  • 2012年05月17日 16:01
  • 5601

MFC简单绘图

MFC简单绘图
  • daoming1112
  • daoming1112
  • 2017年01月23日 23:52
  • 164

Windows编程基础 第七章 windows绘图 windows绘图设备

// windows09.cpp : 定义应用程序的入口点。 // #include "windows09.h" #include "stdafx.h" #include "resource.h" #...
  • yangxuefeng09
  • yangxuefeng09
  • 2014年09月04日 14:59
  • 902

基于Visual C++之Windows核心编程代码分析(4)获取操作系统信息

我们在进行Windows编程的时候,经常需要获取操作系统的信息,好根据操作系统的信息进行信息处理,保证软件的兼容性。 具体请见代码实现与注释分析。   [cpp] view ...
  • flyingleo1981
  • flyingleo1981
  • 2016年12月08日 21:43
  • 224

一个简单的画图的程序

CDC memDC; CBitmap bitmap; bitmap.Attach(pDoc->hbitmap); memDC.SelectObject (&bitmap); memDC.MoveTo ...
  • qq137352475
  • qq137352475
  • 2016年02月15日 20:08
  • 259

一个最最简单的画图软件

唯一值得一用的特点是,可以重复你画画时候的先后顺序(也就是轨迹)。源程序:读图程序:http://pickup.mofile.com/4033993311440329画图程序:http://picku...
  • vagrxie
  • vagrxie
  • 2007年04月22日 15:22
  • 15167

Java实现的一个画图工具

效果: 代码:
  • lasolmi
  • lasolmi
  • 2014年10月20日 12:59
  • 734

[ windows程序设计(programing windows) ] - 控制项之列表框入门

列表框和组合框差不多,换句话说,组合框是列表框加上一个编辑控件或者静态控件。 先来说说创建,老规矩,还是使用CreateWindow函数来创建,lpClassName参数应设置为WC_LIS...
  • B1aNbian
  • B1aNbian
  • 2017年03月05日 14:07
  • 247

Python简单绘图一

其实一直都想学习一下Python,但是程序员都知道,只有当你真正用到一门语言的时候,学起来效率最高,所以我现在要用了 本来这个画图的工作,同事已经用MATLAB完成了,但是我自己一直觉得MATLAB不...
  • lucky_greenegg
  • lucky_greenegg
  • 2017年08月12日 12:08
  • 974
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows编程之简单的画图操作
举报原因:
原因补充:

(最多只允许输入30个字)