Dialog窗口

本文介绍了Windows编程中的关键技术和实践,包括GDI+图形处理、对话框与窗口管理、多文档界面(MDI)的设计、32位与64位程序的区别、控件的状态检测以及热键的实现方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值