hwnd hwnd = createwindowex(ws_ex_layered, text("testwindow"), text("透明視窗"), ws_popup | ws_visible, 0, 0, 20, 20, null, hinstance, null);
setlayeredwindowattributes(hwnd, 0, 0, lwa_colorkey);
這樣就建立了乙個對黑色透明的視窗。
然後我們在wm_paint訊息處理中給字幕框繪製邊框和字幕內容。
case wm_paint:
hdc = beginpaint(hwnd, &ps);
// todo: add any drawing code here...
rect rc;
getclientrect(hwnd, &rc);
//繫結字型
hfont holdfont = (hfont)selectobject(hdc, m_hfont);
//寫入字幕內容
drawtext(hdc, sztext, strlen(sztext), &rc, dt_editcontrol | dt_wordbreak);
//建立畫筆畫邊框
logpen lg;
lg.lopncolor = 0x00ff0000
; lg.lopnstyle = ps_dash;
lg.lopnwidth
.x = 2
; hpen hpen = createpenindirect(&lg);
hpen holdpen = (hpen)selectobject(hdc, hpen);
point pt;
::movetoex(hdc, rc.left, rc.top, &pt);
lineto(hdc, rc.left, rc.bottom);
lineto(hdc, rc.right, rc.bottom);
lineto(hdc, rc.right, rc.top);
lineto(hdc, rc.left, rc.top);
selectobject(hdc, holdfont);
selectobject(hdc, holdpen);
endpaint(hwnd, &ps);
break
;
繪製了內容後,我們就可以看到字型下面是透明的了,不過我們還要加上邊框拉伸的功能,和拖動功能,響應wm_nchittest和wm_size訊息。
case wm_nchittest:
//獲取滑鼠位置
point pt;
pt.x = get_x_lparam(lparam);
pt.y = get_y_lparam(lparam);
::screentoclient(hwnd,&pt);
//得到視窗矩形
rect rcclient;
::getclientrect(hwnd, &rcclient);
//左上角
if (pt.x20&&pt.y20)
//左下角
else
if (pt.x20 && pt.y>rcclient.bottom-20)
//右下角
else
if (pt.x>rcclient.right-20 && pt.y>rcclient.bottom-20)
//以下這四個是上、下、左、右四個邊
else
if (pt.x20)
else
if (pt.x>rcclient.right-20)
else
if (pt.y20)
if (pt.y>rcclient.bottom-20)
else
break;
//響應wm-size訊息
case wm_size:
; ::getclientrect(hwnd, &rcclient);
invalidaterect(hwnd,&rcclient,false);
} break;
WIN32 API程式設計之 透明static
createwindow可以直接建立乙個staitc,但這個static是不透明的,如果我們把視窗背景設定為gray brush,則static會很明顯的有乙個白色背景,一般來說這樣肯定很難看。可以先給 static設定乙個ws ex transparent的擴充套件屬性,然後在訊息 函式中攔截 w...
在Win32API窗體下實現透明背景
前面拜讀過本站無數高手的許多好文章,受益非淺,首先向各位大俠致敬!今天程式設計偶有小得,不敢獨享,特拿出來與各位共享,希望對某些朋友有些許幫助。如果我的窗體支援resize,那麼我調整大小的過程中,要不停的計算裁切框 要逐點掃瞄象素,並對裁切框進行操作 計算量相當大,特別當窗體比較大的時候更是如此,...
win32彙編使用win32 api實現字串拷貝
字串拷貝,呼叫win32的lstrcpy函式 拷貝了以後用訊息框顯示一下 386 model flat,stdcall option casemap none include s masm32 include windows.inc include s masm32 include user32.i...