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编程之文件操作

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

Windows编程 常用数据类型转化及操作[转载]

1 数学类型变量与字符串相互转换(这些函数都在STDLIB.H里) (1)将数学类型转换为字符串可以用以下一些函数: 举例: _CRTIMP char * __cdecl _itoa(...
  • RitMan
  • RitMan
  • 2015年12月31日 15:21
  • 387

Windows编程_Lesson004_项目预备_异步IO操作

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

windows编程之进程操作

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

windows编程之菜单操作

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

Windows编程中各种操作文件的方法

windows编程中文件操作有以下几种常见方法: 1.C语言中文件操作。 2.C++语言中的文件操作。 3.Win32 API函数文件操作。 4.MFC CFile类文件操作。 5.MFC CFi...

windows编程之线程操作

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

Windows编程中各种操作文件的方法

windows编程中文件操作有以下几种常见方法: 1.C语言中文件操作。 2.C++语言中的文件操作。 3.Win32 API函数文件操作。 4.MFC CFile类文件操作。 5.MFC ...

转,windows编程中关于文件的操作

下面是windows中提供的对于文件进行操作的API函数及其功能:CloseHandle   关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。CompareFileTime  ...

Windows编程_Lesson004_项目预备_同步IO操作

封装File类我们在进行文件操作时,会有两个版本,一个带_s的版本,一个不带_s的版本,带_s的版本多传递了一个size_t的参数,这个参数有两个功能: 进行文件操作的时候不会越界; 不会被别人使用s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows编程之简单的画图操作
举报原因:
原因补充:

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