Re: [問題] 視窗化程式設定

看板C_and_CPP作者 (藍影)時間12年前 (2012/01/05 22:55), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
先小抱怨一下,我覺得這篇敘述沒很合格說。 你是要「建立」起透明的視窗,還是要將「某個特定已存在」的視窗變透明? 這二種做法差蠻多的。另外如果是「建立」的話,似乎再註明是 一般的 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
真的很謝謝你QQ
01/06 11:13, 1F
文章代碼(AID): #1F1Rd6tz (C_and_CPP)
文章代碼(AID): #1F1Rd6tz (C_and_CPP)