1、BitBlt():是CDC成员函数
BOOL BitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORDdwRop);
将pSrcDC的中的位图输出到调用该函数的CDC对象上,因为要想在一个CDC对象上显示位图,不能够直接在其上面“画”,必须先在一个兼容DC上画,之后再调用BitBlt函数,将兼容DC上的位图拷贝到该DC上
BitBlt使用例子:https://blog.youkuaiyun.com/sht5206/article/details/78792841
BitBlt函数说明博文:https://blog.youkuaiyun.com/bberdong/article/details/6934270
2、GetModuleFileName():获取exe执行文件目录--(windows函数)
void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );
此函数经常与GetModuleFileName函数配合使用,此用来分割用GetModuleFileName函数获取到的exe路径,与_splitpath对应的函数是_makepath函数,用来合成路径
3、PathFileExists,CFileFinder:
检查文件是否存在,查找文件
4、ShellExecute:
执行外部的程序--(windows函数)
5、窗口相关函数:
1)窗口位置大小信息(CWnd成员函数):GetWindowRect(LPRECT)与ScreenToClient(LPRECT)、GetClientRect(LPRECT)与ClientToScreen--(CWnd方法)
CenterWindow()使窗口居中显示;
SetWindowText()设置窗口的标题;
2)移动窗口:MoveWindow(LPRECT)--(CWnd方法)
3)窗口显示显示:ShowWindow(),参数可选SW_SHOW、SW_HIDE--(CWnd方法)
4)窗口风格初始化:ModifyStyleEx,e.g.ModifyStyleEx(0, WS_EX_LAYERED)--(CWnd方法)
5)窗口风格设置:SetWindowLong,包括窗口默认最大化、最小化,e.g.::SetWindowLong(m_hWnd, GWL_STYLE, WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX);,其中WS_MINIMIZEBOX 最小化参数--(Windows函数)
6)窗口颜色透明度设置:SetLayeredWindowAttributes
SetLayeredWindowAttributes(RGB(255,255,255), 255, LWA_ALPHA | LWA_COLORKEY);//LWA_ALPHA | LWA_COLORKEY:crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。
7)获取各种DC:GetDC获取窗口客户区DC(只包括窗口客户区,vs成员函数、API函数都可以,都需要ReleaseDC);GetWindowDC获取整个窗口DC(包括窗口客户区、标题栏等); ::GetDC(NULL)获取整个桌面DC。
以下代码选自:https://blog.youkuaiyun.com/jiangqin115/article/details/44174163
1.SDK
WIN32 API函数在view类中获得DC句柄
HDC hdc
hdc=::GetDC(m_hWnd);
::ReleaseDC(m_hWnd,hdc) //一定要释放句柄
2.利用MFC获得DC句柄
CDC *pDC=GetDC();
ReleaseDC(pDC) //一定要释放句柄
3.利用CClientDC获得DC句柄(不需要调用释放函数,析构函数自动调用)
CClientDC dc(this) //作用范围在view窗口内
CClientDC dc(GetParent())//作用范围在Fraim框架内
CClientDC 不需要调用释放函数,解析函数自动调用
4.利用CWindowDC获得DC句柄(不需要调用释放函数,析构函数自动调用)
CWindowDC dc(this)//作用范围在view窗口内
CWindowDC dc(GetParent())//作用范围在Fraim框架内
CWindowDC dc(GetDesktopWindow())//作用范围在整个桌面
6、在MFC中 - 获取窗口句柄方法:
要找到某个CWnd对象的HWND,用GetSafeHwnd();在窗口类中,有句柄的成员变量,故可以直接访问: m_hWnd ;想得到一个控件的的句柄GetDlgItem(ID…)->m_hWnd
MFC中 - 获取CView方法:
AfxGetMainWnd()->GetActiveView();
SDI: ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
MDI: ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveFrame()->GetActiveView();
7、用兼容DC绘图部分
在DC上绘图(用windows函数):windows中不能够直接在DC上绘图,但可以直接在其兼容DC上绘图(OpenGL的原理就是指定兼容DC的BITMAP的颜色值,之后将兼容DC复制到DC上,就可以完成在DC上绘图的效果),关键性代码如下(取自张立铜代码):
HDC hDC = GetDC(hWnd);
HDC hMem = ::CreateCompatibleDC(hDC);
void* buffer = 0;
HBITMAP hBmp = CreateDIBSection(hDC,&bmpInfor,DIB_RGB_COLORS,(void**)&buffer,0,0);
获取DC;创建兼容DC;CreateDIBSection函数创建应用程序可以直接写入的、与设备无关的位图(DIB),返回一个位图句柄,该函数会根据位图结构信息(BITMAPINFO)分配内存空间,你不用为它分配内存,这块内存也不需要你释放,系统会自己释放的。
另外注意:使用CreateDIBSection函数获得的内存块指针(输出的第四个参数)所指向的地址中是没有内容的,我们必须向里面写入图像数据,然后才能够显示图像(详细使用在张立铜代码中有)。
SelectObject(hMem,hBmp);
将位图信息选入兼容DC中,在此之后就可以直接修改buffer的值(buffer值对应像素值)完成在兼容DC上的绘图
BitBlt(hDC,0,0,width,height,hMem,0,0,SRCCOPY);
完成对兼容DC绘图后,将兼容DC内容拷贝到DC上,完成DC的显示
输出BMP图片:前边创建兼容DC、获取设备无关位图(DIB)、将DIB选入兼容DC这三部分与上边相同,函数可选用上边的::CreateCompatibleDC、CreateDIBSection、SelectObject API函数,也可以选用“输出BMP小结”博文中的成员函数。
GetDIBits(compatibleDC.m_hDC, (HBITMAP)bitmapData.m_hObject, 0, height, pByte, (LPBITMAPINFO)&bitmapInfoHeader, DIB_RGB_COLORS);
在完成这三部之后,用兼容DC绘图,最后使用GetDIBits函数将兼容DC的BMP内容拷贝到一个buffer上,就可以完成对任意图像的BMP图片输出
注意:BitBlt函数是将兼容DC的DIB输出到DC上,GetDIBits函数是将兼容DC的DIB输出到一个buffer上。
8、获取字体大小
GetTextExtent:CDC方法,可以得到指定字符长宽
9、设置字体背景色透明
dc.SetBkMode(TRANSPARENT); //透明 CDC方法
10、设置字体方向、对齐方式
dc.SetTextAlign(TA_BOTTOM | TA_CENTER)
11、SetCapture、GetCapture、ReleaseCapture
正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口。如果调用了SetCapture,之后无论鼠标的位置在哪,鼠标消息都发给指定的这个窗口,直到调用ReleaseCapture或者调用SetCapture设置另一个窗口为止。
很多时候,窗口或控件在鼠标按下后,需要知道鼠标移动和放开的情况,例如按钮在鼠标按下后会变为“按下”状态,鼠标移出按钮区域时“弹起”,所以按钮控件需要在鼠标按下时SetCapture,鼠标放开后ReleaseCapture。
GetCapture只是检查一下当前是哪个窗口捕获了鼠标,通常不需要调用。
12、GetWindow、GetTopWindow、GetNextWindow
可以用来获取同级窗口,参考:http://www.360doc.com/content/14/0120/17/14605176_346690776.shtml
13、::GetDesktopWindow、::GetWindowRect(WindowsAPI)
GetDesktopWindow获取桌面窗口句柄,::GetWindowRect(::GetDesktopWindow(), &rect);获取桌面窗口分辨率
14、DrawText可以设置文本的基准线,是否换行,在CRect中水平居中还是垂直居中
参数说明,参考:https://www.cnblogs.com/qq76211822/p/4810779.html
15、读BMP图片数据到一个Byte数组:GetDIBits
GetDIBits(compatibleDC.m_hDC, (HBITMAP)bitmapData.m_hObject, 0, height, pByte, (LPBITMAPINFO)&bitmapInfoHeader, DIB_RGB_COLORS)