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