1. GDI Plus使用的头及库
#include <GdiPlus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;
2.对话框 - 窗口 MessageBox
MessageBox,实际上是操作系统按一定的资源建立的窗口。
CreateDialog -> CreateWindow去创建窗口
模态窗口 - 非模态窗口
ASCII码... 只用1byte表示一个字符。。。。255
UNICODE 每一个字符占两个字节。。65536种字符 ----可以表示全世界的文字。
UTF编码 ----可变长的编码。对于英文来说,与ASCII一样,一个字节表示。
汉字是两个字节。
3. MDI多文档窗口
4. Win32程序 32位的应用程序,Win64
a>> 使用的内存长度不一样,硬件来说,只是用地址总线的低32位来寻址。4GB的内存空间0xFF FF FF FF
b>> 寄存器,EAX,ECX,EBX,EDX....每一个寄存器只能存储一个32bit的值。
64位还能用RAX,RBX,RCX......
5. 判断是否选中,对test发送一个消息BM_GETCHECK,来获取它的选中状态。
SendMessage(GetDlgItem(hWnd, IDC_TEST), BM_GETCHECK, 0, 0));
SendMessage(GetDlgItem(hWnd, IDC_TEST), BM_SETCHECK, true, 0));
6.正差哪个状态,CheckBox只有两种状态,选中和不选中。
属性选中Tri-state 三态的 打上勾,半灰色,未选上。
7.向HOTKEY CONTROL发送一个HKM_GETHOTKEY消息,它会返回一个当前按下热键的虚拟键码。
只返回16位的值,2bytes...高一个字节中保存的是辅助键【ALT,SHIFT,CTRL】
低一个字节保存的扫描码。
DWORD ret = SendMessage(GetDlgItem(hWnd, IDC_HOTKEY1), HKM_GETHOTKEY, 0, 0);
WCHAR wszTmp[25];
wprintf(wszTmp, L”choose hotkey ascii %d”, LOWORD(ret)); //虚拟键码存储在低16位。
MessageBox(hWnd, wszTmp, 0, MB_OK);
8. ShowWindow(hWnd, SW_HIDE);
9. 有特定的需求窗口
自己去注册一个窗口类,实现特定的功能。
wc.style = CS_PARENTDC | CS_GLOBALCLASS; //子窗口的样式
CreateWindow(); //必须写WS_CHILD | WS_VISIBLE属性,父控件属性
一个窗口长什么样? 实在其回调函数WM_PAINT中绘制的。
WM_MOUSEMOVE //鼠标经过消息
WM_MOUSEHOVER //鼠标进入消息
WM_MOUSELEAVE //鼠标离开消息
hWnd是控件的窗口,它的父窗口就是程序的主窗口,翻译并转发给窗口。
10.GDI+
11.GDI+是基于mfc的
#define _AFXDLL //需要定义的宏
#include <afxwin.h> //MFC核心组件和标准组件
#include <faxdisp.h> //MFC自动化类
MDd MD
MTd MT
MD MT的区别:
MD叫做动态运行时库。MFC的库。真正运行的二进制代码mfc在dll里面。交给客户运行的时候,客户需要去安装一个VC的运行库。否则没有办法运行。
MT叫做静态运行库。MFC的库。它会把使用到的MFC的功能的二进制代码直接链接到自己的程序中,不依赖运行库,但是生成的程序会变大一点。
//初始化GDI Plus应用环境:(可直接复制粘贴)
Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_gdiplusToken;
GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
//释放GDI Plus的应用环境
GdiplusShutdown(m_gdiplusToken);
绘图需要有画布。
void OnPaint(HDC hDC)
{
//加载背景图片并设置窗口大小
Gdiplus::Image bkImage(L”./RES/BG.PNH”); //加载图片的类
int nWidth = bkImage.GetWidth(); //返回图片的宽度
int nHeight = bkImage.GetHeight(); //返回图片的高度
::SetWindowPos(g_hMainWnd, HWND_TOP, 0, 0, nWidth*2, nHeight*2, SWP_NOMOVE | SWP_SHOWWINDOW);
//画图片
Gdiplus::Graphics graphics(hDC);
//相对GDI来说,1。封装了图片解码部分, 2. 接口更加的易用
graphics.DrawImage(&bkImage, 0, 0, nWidthth*2, nHeight*2);
//画笔,颜色是什么? 多粗?0xffff0000 ARGB格式 alpha red green blue GDI-BITMAP BGRA
Pen *pen = new Pen(0xffff0000, 1.0f);
//画线
graphics.DrawLine(pen, 10, 10, 20, 20);
//画椭圆
graphics.DrawEllipse(pen, 20, 20, 100, 50);
//画矩形
graphics.DrawRectangle(pen, 120, 70, 30, 20);
delete pen;
//实体画刷
SolidBrush * solidB = new SolidBrush(Color(255, 0, 0, 255));
graphics.FillRectangle(solidB, 120, 70, 30, 20);
delete solidB;
//贴图画刷
Image ironMan(L”.PNG”);
TextureBrush tBrush(&ironMan); //通过图片生成画刷
Pen *pen1 = new Pen(&tBrush, 40); //通过画刷来生成一支笔
graphics.DrawRectangle(pen1, 100, 100, 100, 60);
delete pen1;
}