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