(一)不規則窗口
Windows提供的只是標準的矩形窗口,要想建立一個不規則的窗口就需要調用API函數來實現。建立一個不規則的窗口,一般是先用創建區域的API函數建立一個不規則的區域,再用API函數SetWindowRgn改變窗口的區域。這些API函數在C++ Builder中包含在頭文件wingdi.h和winuser.h里面,因此,要使用這些API函數就要先在程序頭部加上包含頭文件的語句:
include $#@60;wingdi.h$#@62;
include $#@60;winuser.h$#@62;
SetWindowRgn函數能改變一個窗口的區域,該函數有三個參數,第一個參數hWnd是欲設置區域的窗口句柄,第二個參數hRgn是欲設置的區域,第三個參數bRedraw一般設為true,即立即重畫窗口。
用來創建區域的API函數有多個,最常用的有三個:
1、CreateRectRgn函數,用來創建一個由X1、Y1和X2、Y2坐標點確定的矩形區域。當坐標點X1和Y1相等、X2和Y2也相等的時候,創建的是一個正方形。
例子:
//創建長方形
HRGN hRect=CreateRectRgn(0,0,400,200);
SetWindowRgn(Handle,hRect,true);
//創建正方形
HRGN hRect=CreateRectRgn(0,0,300,300);
SetWindowRgn(Handle,hRect,true);
2、CreateEllipticRgn函數,用來創建一個由X1、Y1和X2、Y2坐標點確定的矩形所內切的橢圓。同樣,X1、Y1和X2、Y2坐標點所確定的矩形為正方形時,創建的就是一個圓形。
例子:
//創建橢圓
HRGN hElliptic=CreateEllipticRgn(0,0,400,250);
SetWindowRgn(Handle,hElliptic,true);
//創建圓形
HRGN hElliptic=CreateEllipticRgn(0,0,400,400);
SetWindowRgn(Handle,hElliptic,true);
3、CombineRgn函數,能將兩個區域組合為一個新區域,它有四個參數,第一個參數hrgnDest保存合并后的新區域,第二個參數hrgnSrc1、三個參數hrgnSrc2為欲合并的兩個區域,第四個參數fnCombineMode是區域組合的方式,它的值是為下面組合方式之一:
組合方式 說明
RGN_AND 建立兩個區域的交集
RGN_COPY 建立hrgnSrc1的拷貝
RGN_DIFF 建立兩個區域不相交的部分
RGN 建立兩個區域的并集
RGN_XOR 建立除兩個區域并集之外的部分
例子:
//創建一個圓形和長方形交集的組合形狀
HRGN hRect=CreateRectRgn(0,0,300,300);
HRGN hElliptic=CreateEllipticRgn(0,0,400,250);
CombineRgn(hRect,hRect,hElliptic,RGN_OR);
SetWindowRgn(Handle,hRect,true);
當需要將窗口還原為標準Windows矩形窗口時,只要將SetWindowRgn函數的hRgn參數設為0就行了,如:
SetWindowRgn(Handle,0,true);
(二)得到系統聲卡的個數
當我們編寫一個多媒體程序(如播放器)的時候,有時需要檢測一下計算機中是否安裝了聲卡,如果沒有裝聲卡程序則會終止運行。
在這里,我們就要使用API函數waveOutGetNumDevs,調用這個函數可返回系統中安裝了的聲卡的個數。在C++ Builder 5.0中,它被包含在頭文件“mmsystem.h”里面。
例子:
1、首先在程序頭部加入包含頭文件的代碼:
#include $#@60;mmsystem.h$#@62;
2、在窗體的OnCreate事件中加入下面的代碼:
int Num;
//得到聲卡的個數
Num=waveOutGetNumDevs();
if(Num)
ShowMessage("你有安裝了"+IntToStr(Num)+"塊聲卡");
else
{
ShowMessage("你沒有安裝聲卡!n程序終止運行!");
Close();
}
審核編輯黃宇
-
API
+關注
關注
2文章
1487瀏覽量
61831 -
函數
+關注
關注
3文章
4308瀏覽量
62445
發布評論請先 登錄
相關推薦
評論