GDI的一些知识点
2010-01-09 13:56
106 查看
为何显示的中文是横着的?
如果在各种属性框中选择字体的时候前面有@字符的,显示中文就是横着的,
如何有效更改一个Dialog的背景?
typedef struct tagBITMAP {
LONG bmType;
LONG bmWidth;
LONG bmHeight;
LONG bmWidthBytes;
WORD bmPlanes;
WORD bmBitsPixel;
LPVOID bmBits;
} BITMAP, *PBITMAP; -----BITMAP结构用于定义图像的宽度,高度和颜色格式和图像的值
CBitmap::GetBitmap
int GetBitmap( BITMAP* pBitMap ); ----此函数用于获得图片的信息
返回值为非0,则为成功
CMyGDIView::OnEraseBkgnd函数里应用如下程序,而在CMyGDIView::OnDraw里也可以,但是当重新更改页面大小的时候
OnDraw函数的反应刷新次数太多
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);---在内存中创建一个虚拟设备上下文对象,而不立即显示出来
dcCompatible.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);---获取客户区的Rect
// pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);---将图像按照1:1的比例进行显示
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);----将图像进行变更以合适客户区的尺寸
return true;---不进行下一步的擦除处理,而直接返回,否则会直接擦除刚家加载的背景
怎么初始化一个 COLORREF ?
COLORREF m_color;
m_color=RGB(255,0,0);
怎么选择字体并且显示?
CFontDialog dlg;
if (dlg.DoModal() == IDOK)
{
if(font.m_hObject)
{
font.DeleteObject();
}
font.CreateFontIndirect(dlg.m_cf.lpLogFont);
m_strName=dlg.m_cf.lpLogFont->lfFaceName;
Invalidate(); ---引起窗口重绘
}
以下是显示在OnDraw里的
CFont *pOldFont=pDC->SelectObject(&font);
pDC->TextOut(0,0,m_strName);
pDC->SelectObject(pOldFont);
如何选择颜色并显示?
CColorDialog dlg;
dlg.m_cc.Flags |= CC_RGBINIT | CC_FULLOPEN;
dlg.m_cc.rgbResult=m_clr;---将刚选择的颜色赋回给颜色框体
if(IDOK==dlg.DoModal())
{
m_clr=dlg.m_cc.rgbResult;--获取已经选择的颜色
// m_clr=dlg.GetColor ();---此方法也可以
}
如何控制坐标?
CWindow::ClientToScreen是把坐标从当前窗体转化成全屏幕的!!!
CWindow::ScreenToClient是把屏幕坐标转化成相对当前窗体的坐标!!!!
CWnd::GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。
CWnd::GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客
户区的左上角)的。
们对同一个窗口先GetWindowRect取得一个RECT,再用ScreenToClient转换到客户坐标系。然后GetClientRect取得一个RECT,再用ClientToScreen转换到屏幕坐标系。显然,GetWindowRect
取得的矩阵不小于GetClientRect取得的矩阵。因为前者包含了非客户区,而后包括了客户区。
CWindow和CWnd的区别?
CWindow是ATl中封装的窗口类
CWnd是MFC的封装
什么是ATL呢?
Active Template Library (活动模板库)
Template 是C++新标准中源码重用的新工具 本人感觉棒极了
C++ 有 Standard Template Library 提供了相当多的模板
而 ATL是为COM/ActiveX提供的一组开发库,使COM开发简化
WTL = Windows Template Library,可以说起源于 ATL 类库中关于 Window 创建/管理的类。主要原因是用原始的 WIN32 API 编写漂亮的用户界面工作量大,繁杂
。MFC 虽然提供了一套很好的封装,但是也不是很容易消化和使用,特别是各个 MFC 类之间耦合很紧,要用好 MFC 就要理解很多 MFC 内在的运行机制(有人说 MFC 的
封装是“白盒”封装,呵呵)。WTL 利用 C++ 模版的高级功能,提供很联系很松散的“独立”的类库,使用起来比较方便,而且代码体积小,不必为了学习某个类必须学习一大堆相
关的类。
WTL 不是 Microsoft 官方正式支持的类库,虽然有相当多的人和越来越多的在使用;不过有可能将来会支持的
STL = Standard Template Library
CDC/CClientDC/CPaintDC/CWindowDC的区别是什么?
CDC类是所有绘图类的基类。
底下的类都为CDC的派生类
CPaintDC用于模拟相应WM_PAINT的设备环境,这个类中可以使用CDC中的所有函数.
CClientDC它为非响应Windows消息WM_PAINT的成员函数提供了一个设备环境。
CWindowDC提供了一个设备环境,以便成员函数在包括非客户区在内的整个屏幕区域内绘图
如果在各种属性框中选择字体的时候前面有@字符的,显示中文就是横着的,
如何有效更改一个Dialog的背景?
typedef struct tagBITMAP {
LONG bmType;
LONG bmWidth;
LONG bmHeight;
LONG bmWidthBytes;
WORD bmPlanes;
WORD bmBitsPixel;
LPVOID bmBits;
} BITMAP, *PBITMAP; -----BITMAP结构用于定义图像的宽度,高度和颜色格式和图像的值
CBitmap::GetBitmap
int GetBitmap( BITMAP* pBitMap ); ----此函数用于获得图片的信息
返回值为非0,则为成功
CMyGDIView::OnEraseBkgnd函数里应用如下程序,而在CMyGDIView::OnDraw里也可以,但是当重新更改页面大小的时候
OnDraw函数的反应刷新次数太多
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);---在内存中创建一个虚拟设备上下文对象,而不立即显示出来
dcCompatible.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);---获取客户区的Rect
// pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);---将图像按照1:1的比例进行显示
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);----将图像进行变更以合适客户区的尺寸
return true;---不进行下一步的擦除处理,而直接返回,否则会直接擦除刚家加载的背景
怎么初始化一个 COLORREF ?
COLORREF m_color;
m_color=RGB(255,0,0);
怎么选择字体并且显示?
CFontDialog dlg;
if (dlg.DoModal() == IDOK)
{
if(font.m_hObject)
{
font.DeleteObject();
}
font.CreateFontIndirect(dlg.m_cf.lpLogFont);
m_strName=dlg.m_cf.lpLogFont->lfFaceName;
Invalidate(); ---引起窗口重绘
}
以下是显示在OnDraw里的
CFont *pOldFont=pDC->SelectObject(&font);
pDC->TextOut(0,0,m_strName);
pDC->SelectObject(pOldFont);
如何选择颜色并显示?
CColorDialog dlg;
dlg.m_cc.Flags |= CC_RGBINIT | CC_FULLOPEN;
dlg.m_cc.rgbResult=m_clr;---将刚选择的颜色赋回给颜色框体
if(IDOK==dlg.DoModal())
{
m_clr=dlg.m_cc.rgbResult;--获取已经选择的颜色
// m_clr=dlg.GetColor ();---此方法也可以
}
如何控制坐标?
CWindow::ClientToScreen是把坐标从当前窗体转化成全屏幕的!!!
CWindow::ScreenToClient是把屏幕坐标转化成相对当前窗体的坐标!!!!
CWnd::GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。
CWnd::GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客
户区的左上角)的。
们对同一个窗口先GetWindowRect取得一个RECT,再用ScreenToClient转换到客户坐标系。然后GetClientRect取得一个RECT,再用ClientToScreen转换到屏幕坐标系。显然,GetWindowRect
取得的矩阵不小于GetClientRect取得的矩阵。因为前者包含了非客户区,而后包括了客户区。
CWindow和CWnd的区别?
CWindow是ATl中封装的窗口类
CWnd是MFC的封装
什么是ATL呢?
Active Template Library (活动模板库)
Template 是C++新标准中源码重用的新工具 本人感觉棒极了
C++ 有 Standard Template Library 提供了相当多的模板
而 ATL是为COM/ActiveX提供的一组开发库,使COM开发简化
WTL = Windows Template Library,可以说起源于 ATL 类库中关于 Window 创建/管理的类。主要原因是用原始的 WIN32 API 编写漂亮的用户界面工作量大,繁杂
。MFC 虽然提供了一套很好的封装,但是也不是很容易消化和使用,特别是各个 MFC 类之间耦合很紧,要用好 MFC 就要理解很多 MFC 内在的运行机制(有人说 MFC 的
封装是“白盒”封装,呵呵)。WTL 利用 C++ 模版的高级功能,提供很联系很松散的“独立”的类库,使用起来比较方便,而且代码体积小,不必为了学习某个类必须学习一大堆相
关的类。
WTL 不是 Microsoft 官方正式支持的类库,虽然有相当多的人和越来越多的在使用;不过有可能将来会支持的
STL = Standard Template Library
CDC/CClientDC/CPaintDC/CWindowDC的区别是什么?
CDC类是所有绘图类的基类。
底下的类都为CDC的派生类
CPaintDC用于模拟相应WM_PAINT的设备环境,这个类中可以使用CDC中的所有函数.
CClientDC它为非响应Windows消息WM_PAINT的成员函数提供了一个设备环境。
CWindowDC提供了一个设备环境,以便成员函数在包括非客户区在内的整个屏幕区域内绘图
相关文章推荐
- 一些简单知识点
- IOS学习中的一些小知识点总结(持续更新)
- IT架构师会问的一些知识点
- 个人记录一些常用的知识点
- 关于socket,port的一些知识点
- Android开发网上的一些重要知识点 [3]
- 没事时用最简单的C++语言编一些小程序可以回顾知识点,增加熟练度
- Cocos2dx 学习记录 [2] 关于混合和高亮一些知识点的体会
- Android开发网上的一些重要知识点
- jquery的一些小知识点
- Android开发,MapBox的使用及部分功能实现(二)----- draw、layer、以及一些杂的知识点
- 整理的一些比较基础的面试知识点
- Mysql数据库中的一些知识点
- Hibernate的一些知识点
- 准备梳理一些前端知识点
- C 语言中一些非常用知识点 备忘录
- 现在刚刚看一些关于Ajax的一些知识点。把它写下来,作为知识的备忘录!
- 一些Swift小知识点的整理
- 一些杂乱的知识点(二)
- UIImageView和UIImage,CGContextRef 的一些知识点