Re: [問題] 視窗化程式設定
先小抱怨一下,我覺得這篇敘述沒很合格說。
你是要「建立」起透明的視窗,還是要將「某個特定已存在」的視窗變透明?
這二種做法差蠻多的。另外如果是「建立」的話,似乎再註明是
一般的 window 還是 dialog 為佳 (這樣給你 sample 也比較方便,不是嗎?)
---
解析度部份我就不再重述了,s大 給了不錯的建議,
有個地方需注意是 (其實也是由於你給的資訊有限,讓人有點摸不著頭緒),
如果 window 或 dialog 含有標題或狀態列,用 CreateWindow 建立出來的
可能不是真的全螢幕,要再經過一點運算。
透明效果一般之 api 則是用 SetLayeredWindowAttributes 沒錯,
不知 msdn 您細閱了沒? (看起來還蠻像是斷章取義的 XD)
msdn SetLayeredWindowAttribute : http://0rz.tw/epQfl
在 parameters 第一項的 HWND 裡面已提到,
A layered window is created by specifying WS_EX_LAYERED when creating the
window with the CreateWindowEx function or by setting WS_EX_LAYERED via
SetWindowLong after the window has been created.
這也是你程式碼裡面,將某個 hwnd 之 style 再重設成 WS_EX_LAYERED 之原因。
至於其它的參數也再上 msdn 自行耐心的 k 過一遍(我也才剛去找一下拿出來試而已),
相信可得到不少解答。
範例碼: http://codepad.org/eCpxPAlU
基本上這函式只是在設定透明度,沒辦法為 background color 重設過,
大多在影響的只有 alpha,0整個看不到,255和原本的 createwindow(ex) 效果一樣,
且使用這函式必須裝 sdk (vc2010 已幫你裝好了),gcc 下找不到這 function,
可能要用 LoadLibrary (沒實作,不甚確定 load 得出來)。
如果效果是要整個背景都變顏色的話,可能就要再參考上一篇 s 大的推文,
用 GetStockObject 去完成 ,細節不多談。
----
ddv70:另外想請教有推薦的書可以參考嗎 01/05 21:35
如果只是要快速上手的話有不少網路資源了,
不過不會用 msdn 的話大概也沒辦法寫 code 寫多久吧
建議找個人帶怎麼用 msdn 較實際。
或直接上網 google 「孫鑫 MFC 視頻」,免註冊,直接線上收看。
如果你只要學 win32 的話直接看第二章就行了,會的話也耐下心看,
看完第二章大概就知道怎麼查 msdn 了。
---
網路資源
functionX : http://www.functionx.com/win32/
Win32 With gcc (MinGW) : http://0rz.tw/ngTu0
theForger's Win32 API Tutorial : http://0rz.tw/VDXnN
Code Project : http://www.codeproject.com/
vc 知識庫 : http://www.vckbase.com/
書
下面兩本很無聊,看著睡著常有的事,睡醒再看就好,
一般人大概半年左右可以邊睡邊看看完它 (其實當收藏書也不錯)
1. Charles Petzold - Programming Windows - Win32 API (5th Ed)
2. 精通Windows API-函数、接口、编程。
第二本我是買大陸書,後來聽說有繁體版。還有另一本本來很想推的,
不過怕寫得太難感覺像是白買的,就不再推了 ( Visual C++ 開發手札)
※ 引述《sand1050 (不知名的人物)》之銘言:
: ※ 引述《ddv70 (大David為)》之銘言:
: : 我是使用vc2010
: : include windows.h
: : 之前co了一段sample code 但是結果視窗卻很小
: : cvNamedWindow("status", 0); // test
: : Window = (HWND) cvGetWindowHandle("status");
: : Window = GetParent(Window) ;
: : style = GetWindowLong( Window, GWL_EXSTYLE);
: : style = style | WS_EX_LAYERED;
: : SetWindowLong( Window, GWL_EXSTYLE, style);
: : SetLayeredWindowAttributes(Window, RGB(255,255,255), 0, LWA_COLORKEY);
: : style = GetWindowLong(Window, GWL_STYLE);
: : style = GetWindowLong(Window, WS_MAXIMIZE);
: : style = style & (~WS_CAPTION) & ~(WS_BORDER) & ~WS_THICKFRAME & WS_MAXIMIZE;
: : SetWindowLong( Window,GWL_STYLE, style);
: : 請問要怎麼設定成全螢幕大小且底色為透明之程式???
: : 萬分感謝大家解答
: 首先,創造視窗前 要先知道你電腦螢幕解析度
: Win32API 有個function GetSystemMetrics 可以取得螢墓解析度
: 範例:
: int x=GetSystemMetrics(SM_CXSCREEN); //取得寬度
: int y =GetSystemMetrics(SM_CYSCREEN); //取得高度
: 附上msdn連結
: http://ppt.cc/3zQL
: 而 CreateWindow 的style
: 設定成 WS_EX_TOPMOST | WS_POPUP
: 視窗寬高 則設定剛取得的x,和y 視窗位置則設0 ,0
: 即可
--
世界上有種,
將 不可能 轉換為 無限可能 的強大力量,
我稱它為 - 信念。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.201
※ 編輯: tropical72 來自: 180.177.76.201 (01/05 23:06)
推
01/06 11:13, , 1F
01/06 11:13, 1F
討論串 (同標題文章)