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编程_Lesson004_项目预备_异步IO操作

异步IO机制异步IO是Windows给我们读写文件提供的的一种的机制,在我们执行CreateFileEx函数是,通过传递相应的参数,就会向操作系统发送请求,那么CreateFileEx函数就会直接返回...

windows编程之进程操作

当我们在硬盘上打开一个exe文件,操作系统会把exe加载到我们的内存中,加载到内存中的exe文件就是一个进程。 首先,要打开一个进程,windows提供了3个API来供我们使用,第一个是WinExec...

windows编程之文件操作

总所周知,C/C++标准库里边,有fread,fopen等文件操作,而在windows环境下,微软当然也给我们提供了这样的API,而且比C/C++运行库更好用,效率更高。 首先,要进行文件操作,你得打...

windows编程之菜单操作

分清几个概念 “主菜单” 和 “顶层菜单” 是一个意思。 主菜单中的项目叫做 “弹出菜单” 或者 “子菜单”。 弹出菜单的项目可以是另外一个弹出菜单。 菜单的状态:启用,禁用,无效化,无效化跟前两者的...

windows编程之线程操作

我们知道,进程是资源分配的最小单位,而线程呢,则是CPU运行的最小单位。 在最早的DOS系统下,CPU每次只能运行一个进程且该进程只有一个线程,当该进程执行完退出后,CPU 才能加载另外一个进程。而现...
  • Timmiy
  • Timmiy
  • 2016-07-04 23:39
  • 1283

Windows编程 基本资源的使用 如何在窗口中输出一些简单的文本

版本:VS2015      语言:C++   今天不知道为什么没什么工作,书看着看着第三章就结束了,Windows高级编程部分内容比较杂乱,东西也比较多,但是作者压缩得很好,把多数懂点都突出出来...

Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现

版本:VS2015 语言:C++   本来想昨天写个消息窗口的内容,讲一些好玩的东西,不过没有时间了,就放到一起了。   今天正好把书的第二章看完了,感觉良好,Windows的编程确实难度要高...

Windows编程 VC++6.0到VS2015 实例小游戏的简单移植 VS下常见错误的排查

版本:VS2015      语言:C++   今天开始进入游戏开发最底层的Windows程序开发!   新翻开这本《Windows游戏编程大师技巧》,感觉真的是棒极了,恨不得十年之前就能学到...

Windows编程 我与Direct的第一次 简单颜色显示的实现

版本:VS2015 语言:C++   最近简直忙死了。晚上抽空把博客写了。   这几天也是深深感觉到自己能力的不足,最近貌似要开3D项目了,比起在老代码上爬滚,还是想写自己的新代码啊。   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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