《MFC Windows程序设计》读书笔记(5)

2020-04-14 01:06

《MFC Windows程序设计》读书笔记 重剑无锋 原创

HDC int int );

hdcSrc, nXSrc, nYSrc,

//指定光栅操作代码,先记住一个SRCCOPY:直接拷贝

DWORD dwRop

CDC::StretchBlt ( HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop );

int CBitmap::GetBitmap(BITMAP* pBitMap); bmBits的值为NULL。

typedef struct tagBITMAP{ LONG bmType; LONG bmWidth;

// 位图类型,必须为0 // 位图宽度 // 位图高度 // 颜色平面数 // 像素的位数 // 位图内存指针

得到BITMAP结构的指针,成功则

返回非0。该结构中图像宽度必须是偶数,此外,如果是DDB,则GetBitmap中返回的LPVOID

LONG bmHeight; WORD bmPlanes; WORD bmBitsPixel; LPVOID bmBits; }BITMAP;

LONG bmWidthBytes; // 每一行像素所在的byte数

15.2.3 位图资源

RC文件中: IDB_MYLOGO CPP文件中:

CBitmap bitmap;

bitmap.LoadBitmap(IDB_MYLOGO ) ;

BITMAP

Logo.bmp

15.2.4 DIB和DIB分区

LONG CBitmap::GetBitmapBits (

//将指定位图的位拷贝到缓冲区里

第46页 共 55页

《MFC Windows程序设计》读书笔记 重剑无锋 原创

HBITMAP hbmp, LONG cbBuffer, LPVOID lpvBits );

LONG CBitmap::SetBitmapBits( HBITMAP hmbp, DWORD cBytes, CONST VOID (lpBits) ); HBITMAP

::CreateBitmap(

// 创建DDB位图,API

int nWidth, int nHeight, UINT cPlanes, UINT cBitsPeral,

CONST VOID *lpvBits );

HBITMAP ::CreateDIBitmap( HDC hdc,

// 创建DIB或DDB位图,API // 设备环境句柄

// 指向位图信息头结构的指针 // 位标识集。它指定系统如何对位

//将位图的颜色数据位设置成指定值

CONST BITMAPINFOHEADER *lpbmih, DWORD fdwlnit,

图的位进行初始化,如果fdwlnit是CBM_INIT,那么函数使用位图信息头结构来获取位图所需的宽度、高度以及其他信息 CONST VOID *lpblnit, 类型数组

CONST BITMAPINFO *lpbmi, UINT fuUsage );

fuUsage:表示BITMAPINFO结构的成员bmiColors是否初始化过,并且如果是,那么bmiColors是否包含明确的红、绿、蓝(RGB)值或调色板索引。参数fuUsage必须取下列值中的一个,这些值的含义为:

DIB_PAL_COLORS:表示提供一个颜色表,并且该表由该位图要选入的设备环境的逻辑调色板的16位索引值数组组成。

DIB_RGB_COLORS:表示提供一个颜色表,并且表中包含了原义的RGB值。 返回值:如果函数执行成功,返回值则是创建的位图的句柄;如果函数执行失败,那么返回值为NULL,若想获取更多错误信息,请调用GetLastError函数。

注意高度若是正数,那么表示是自底向上DIB,而负数表示为自顶向下DIB,这种情况与CreateDIBitmap函数兼容。

DIB扩展:可用在DC中选入DIB扩展,并将它按位传递给屏幕,但也可用直接访问位图。

// 指向BITMAPINFO结构的指针 //

// 指向包含初始的位图数据的字节

第47页 共 55页

《MFC Windows程序设计》读书笔记 重剑无锋 原创

15.2.8 再论::LoadImage

HBITMAP hBitmap = (HBITMAP) ::LoadImage( NULL , 文件名,IMAGE_BITMAP,0,0,

LR_LOADFROMFILE | LR_CREATEDIBSECTION );

有了红色字体的部分,才能创建DIB位图,从BITMAP中读取bmBits时,才不会为空。

第16章. 公用控件

16.1 公用控件基础

16.1.1 创建公用控件

? 方法1:

CProgress wndProgress;

wndProgress.Create( WS_CHILD | WS_VISIBLE | WS_BORDER ,

Crect( x1 , y1 , x2 , y2 ) , this , IDC_PROGRESS ) ; ? 方法2:

在对话框模版中:

CONTROL “” , IDC_PROGRESS , PROGRESS_CLASS , WS_BORDER , 32 ,32 ,80 ,16

各种控件都有自己独有的样式,但大多不用 将模版中的控件与变量联系起来:

DDX_CONTROL( pDX , IDC_PROGRESS , m_wndProgress )

16.1.2 处理通知:WM_NOTIFY消息

典型控件:WM_COMMAND 公用控件:WM_NOTIFY 其:

wParam:发送消息的控件子窗口ID lParam:NMHDR或其超集结构的指针 typedef struct tagNMHDR { HWND UINT UINT } NMHDR;

其中,code通知代码有:

hwndFrom; idFrom; code;

// 窗口句柄

// 控件ID = wParam // 通知代码

第48页 共 55页

《MFC Windows程序设计》读书笔记 重剑无锋 原创

NM_CLICK NM_DBLCLK NM_RCLICK ??

注意:大部分控件都定义有自己的通知代码,表示自己特有的事件 ? 消息的映射和反射

封装在WM_NOTIFY中的通知,通过ON_NOTIFY和ON_NOTIFY_RANGE宏映射到类的成员函数,此外,还可用ON_NOTIFY_REFLECT宏将原通知反射回控件本身 例:

ON_NOTIFY( TVN_ITEMEXPANDED , IDC_TREEVIEW , OnItemExpanded ) ON_NOTIFY( TVN_GETDISPINFO , IDC_TREEVIEW , OnGetDispInfo )

void CMyWindow:: OnItemExpanded( NMHDR* pnmh , LRESULT* pResult ) {}

其中的参数pnmh 与WM_NOTIFY中的lParam一样,pResult指向一个32位的LRESULT变量,该变量接受处理程序的返回值,例如:

*pResult = TRUE ; return;

LRESULT的定义是: typedef LONG LRESULT

16.2.3工具提示控件

class CMyToolTipCtrl:public CToolTipCtrl {

public:

BOOL AddWindowTool( CWnd* pWnd , LPCTSTR pszText ) ; }

BOOL AddWindowTool( CWnd* pWnd , LPCTSTR pszText ) {

TOOLINFO ti ; ti. cbSize = sizeof( TOOLINFO ) ; ti. uFlags = TTF_IDISHWND ; ti. hwnd = pWnd->GetParent()->GetSafeHwnd() ; ti. uId = (UINT) pWnd->GetSafeHwnd() ; ti. rect = ti. hinst = AfxGetInstanceHandle() ; ti. lpszText = (LPTSTR)pszText ;

return (BOOL) SendMessage( TTM_ADDTOOL , 0 , (LPARAM) &ti ) ; } 然后:

CMyToolTipCtrl m_ctrlTT ; m_ctrlTT.Create( this);

m_ctrlTT.AddWindowTool( pWnd , _T(“??”) ) ; ? TOOLINFO结构的定义 typedef struct tagTOOLINFO{

第49页 共 55页

《MFC Windows程序设计》读书笔记 重剑无锋 原创

UINT cbSize; UINT uFlags; HWND hwnd; UINT uId; RECT rect;

HINSTANCE hinst; LPTSTR lpszText; }TOOLINFO ;

16.4.1进度控件

样式:PBS_VERTICAL 函数: SetRange SetPos OffsetPos SetStep

SetRange32 GetPos

StepIt

GetRange

PBS_SMOOTH

第17章. 多线程和线程同步

17.1 多线程基础

17.1.1 工作者线程

工作者线程没有消息循环。 创建方式:

CWinThread* pThread = ::AFXBeginThread( 线程回调函数的名称, LPVOID pParam, 线程的优先级,

线程堆栈的大小, 线程创建后的状态, 安全属性 );

线程回调函数:

UINT ThreadFunc(VPVOID pParam);

线程内部的变量和成员数据,推荐都在堆栈上创建,这样,当线程退出时,它们会自动析构。

// 传递给线程的参数

// 默认是THREAD_PRIORITY_NORMAL // 默认值0,表示1MB大小

// 默认0,立即执行。其他CREATE_SUSPEND // 默认NULL,表示跟父线程一样

第50页 共 55页


《MFC Windows程序设计》读书笔记(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:3-4岁敏感期

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: