我attampted繪製不規則窗口與UpdateLayeredWindow(),在msvc2008,XP SP3。
這裏是我的代碼部分:我的代碼,它使用UpdateLayeredWindow不起作用
//Add something(CreateWindowEx()):
hwndCyauWnd = CreateWindowEx(
/*WS_EX_TOOLWINDOW |*/ WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_LAYERED,
lpwsCyauClassName,
lpwsCyauWndName,
WS_CLIPSIBLINGS | WS_POPUP,
GetSystemMetrics(SM_CXSCREEN)-320,
GetSystemMetrics(SM_CYSCREEN)-232,
320, 200,
NULL,
NULL,
hInstance,
NULL);
//Skip Lines
HDC hdcCyauWnd = GetDC(hwndCyauWnd);
HDC hdcBuffer = CreateCompatibleDC(hdcCyauWnd);
//HBITMAP hbmCyau = CreateCompatibleBitmap(hdcBuffer,120, 93);
//SelectObject(hdcBuffer, hbmCyau);
POINT ptZero = {0, 0};
POINT ptDrawPos = {0, 0};
RECT rctCyauWnd;
GetWindowRect(hwndCyauWnd, &rctCyauWnd);
SIZE szCyauWnd={rctCyauWnd.right - rctCyauWnd.left, rctCyauWnd.bottom - rctCyauWnd.top};
BLENDFUNCTION blendPixelFunction = { AC_SRC_OVER, 0, 100, AC_SRC_ALPHA};
Graphics gphCyauWnd(hdcBuffer);
Image imgCyau(L"surface0000.png");
gphCyauWnd.DrawImage(&imgCyau, 0, 0, 125, 93);
UpdateLayeredWindow(hwndCyauWnd,
hdcCyauWnd, &ptZero,
&szCyauWnd,
hdcBuffer, &ptZero,
0, //RGB(255, 255, 255),
&blendPixelFunction,
ULW_ALPHA);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
我嘗試了好幾種方法來使用此功能,但都失敗了,沒有出現在屏幕上。
有誰告訴我發生了什麼,以及如何解決售後服務呢?
地址:
整個源文件已被上傳到my skydrive,任何人都可以編輯,非常感謝! (我已成爲一個可憐的失敗者現在...)
每[文件](http://msdn.microsoft.com/en-us/library/windows/desktop/ms633556.aspx),窗口傳遞作爲「UpdateLayeredWindow」函數的第一個參數必須具有使用「CreateWindowEx」函數創建時指定的「WS_EX_LAYERED」樣式。而在Windows 8之前的版本中,該窗口必須是頂層窗口(Windows 8支持頂級Windows *和*子窗口的'WS_EX_LAYERED'風格。) – 2012-03-17 08:52:13
@CodyGray哦,對不起。我留下了一些線。 hwndCyauWnd在塊之前已經有WS_ES_LAYERED樣式。所以它應該可以工作,但事實並非如此。這就是我困惑的原因。 – cuter44 2012-03-17 09:19:53
嗯,請務必編輯問題並添加您遺漏的那些行。特別是你調用'CreateWindowEx'來創建窗口。像這樣的問題(您要求某人幫助您調試代碼)應該包含一個我們可以自行運行的小型自包含演示項目。 – 2012-03-17 09:24:01