常用函数---windows/MFC

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值