日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

VC异形窗体

發(fā)布時(shí)間:2024/4/11 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC异形窗体 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

方法一:

異形窗口的原理很簡單,首先加載一張位圖畫刷作窗口背景,然后設(shè)置透明色就可以使得窗口由矩形變成任意形狀。這樣使得窗口的顯示更加美觀。?

1.重寫OnCreate方法

int?CClientUpdateDlg::OnCreate(LPCREATESTRUCT?lpCreateStruct)

{

if?(CDialog::OnCreate(lpCreateStruct)?==?-1)

return?-1;

?

//?TODO:??在此添加您專用的創(chuàng)建代碼

//?設(shè)置分層屬性

SetWindowLong(m_hWnd,?GWL_EXSTYLE,?GetWindowLong(m_hWnd,?GWL_EXSTYLE)?|?WS_EX_LAYERED);

//?設(shè)置透明色

COLORREF?clTransparent?=?RGB(0,?0,?0);

::SetLayeredWindowAttributes(m_hWnd,?clTransparent,?0,?LWA_COLORKEY);

?

return?0;

}

2.把背景圖片貼上去

BOOL?CClientUpdateDlg::OnEraseBkgnd(CDC*?pDC)

{

//?TODO:?在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值

?

//窗口寬和高

int?frameWidth;

int?frameHeight;

?

//背景圖片

CImage?imageBKG;

//imageBKG.Load(_T("res\\UpdateBKG.bmp"));

imageBKG.Load(_T("res\\Kitty.bmp"));

frameWidth=imageBKG.GetWidth();

frameHeight=imageBKG.GetHeight();

imageBKG.BitBlt(pDC->GetSafeHdc(),0,0,frameWidth,frameHeight,0,0,SRCCOPY);

?

CRect?rc;

GetWindowRect(&rc);

MoveWindow(rc.left,rc.top,frameWidth,frameHeight);

return?true;//CDialog::OnEraseBkgnd(pDC);

}

方法二:

#define PICWIDTH??? 365
#define PICHEIGHT?? 160

//創(chuàng)建一個(gè)由一系列點(diǎn)圍成的區(qū)域
#define BIANKUANG? 5
??? ?CPoint pts[8] = {CPoint(BIANKUANG, 0), CPoint(PICWIDTH-BIANKUANG, 0), CPoint(PICWIDTH, BIANKUANG), CPoint(PICWIDTH, 150),
??? ??? ?CPoint(PICWIDTH-BIANKUANG, PICHEIGHT), CPoint(BIANKUANG, PICHEIGHT), CPoint(0, PICHEIGHT-BIANKUANG), CPoint(0,BIANKUANG)};
??? ?HRGN rgnPolygonRect=CreatePolygonRgn(pts,_countof(pts),ALTERNATE);

???? SetWindowRgn(rgnPolygonRect,true);

//不用時(shí)一定要用DeleteObject函數(shù)刪除該區(qū)域
DeleteObject(rgnPolygonRect);

方法三:

按照掩碼剪切窗體

/*
在OnCreate()里面添加如下代碼
int CttDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO:? 在此添加您專用的創(chuàng)建代碼
#define IMG "Res\\0.bmp"
YiXingWnd(RGB(255,255,255),IMG);
return 0;
}

在OnEraseBkgnd()里面添加如下代碼
BOOL CttDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值

CImage BKimage;
BKimage.Load(IMG);
BKimage.BitBlt(pDC->GetSafeHdc(),0,0,BKimage.GetWidth(),BKimage.GetHeight(),0,0,SRCCOPY);

return TRUE;//CDialog::OnEraseBkgnd(pDC);
}
*/
void CttDlg::YiXingWnd(COLORREF MaksRGB, char * ImageSource)
{
?? ?CImage BKimage;
?? ?BKimage.Load(ImageSource);

?? ?CRect rc;
?? ?GetWindowRect(&rc);
?? ?MoveWindow(rc.left,rc.top,BKimage.GetWidth(),BKimage.GetHeight());

?? ?HRGN hRgnCommbine;
?? ?hRgnCommbine=CreateRectRgn(0,0,0,0);
?? ?HRGN hRgnNew;

?? ?COLORREF transClr=MaksRGB;

?? ?//y豎著的,x是橫著的
?? ?for (int y=0;y<BKimage.GetHeight();y++)
?? ?{
?? ??? ?int leftx=0;
?? ??? ?for (int x=0;x<BKimage.GetWidth();x++)
?? ??? ?{
?? ??? ??? ?while (x < BKimage.GetWidth() && BKimage.GetPixel(x,y) == transClr)
?? ??? ??? ?{
?? ??? ??? ??? ?++x;
?? ??? ??? ?}
?? ??? ??? ?leftx = x;
?? ??? ??? ?while (x < BKimage.GetWidth() && BKimage.GetPixel(x,y) != transClr)
?? ??? ??? ?{
?? ??? ??? ??? ?++x;
?? ??? ??? ?}
?? ??? ??? ?if (leftx != x)
?? ??? ??? ?{
?? ??? ??? ??? ?hRgnNew=CreateRectRgn(leftx, y, x, y + 1);
?? ??? ??? ??? ?CombineRgn(hRgnCommbine, hRgnCommbine,hRgnNew, RGN_OR);
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?SetWindowRgn(hRgnCommbine,TRUE);
}














總結(jié)

以上是生活随笔為你收集整理的VC异形窗体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。