msvc2008, xp sp3에있는 UpdateLayeredWindow()를 사용하여 불규칙한 윈도우를 그리려고했습니다. 여기
내 코드의 일부입니다 :이 기능을 사용하려면 여러 가지 방법을 시도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' 스타일을 지정해야합니다. 그리고 8 이전의 Windows 버전에서는 그 윈도우가 최상위 윈도우 여야합니다 (Windows 8은 최상위 윈도우 * 및 * 하위 윈도우에 대해 'WS_EX_LAYERED'스타일을 지원합니다). –
@CodyGray 오, 죄송합니다. 나는 몇 줄을 남겼다. hwndCyauWnd는 이미 블록 앞에 WS_ES_LAYERED 스타일을 가지고 있습니다. 그렇게하면 효과가 있지만 그렇지 않습니다. 그래서 혼란 스럽습니다. – cuter44
흠, 질문을 편집하고 빠뜨린 행을 추가하십시오. 특히 CreateWindowEx를 호출하여 창을 생성하는 곳. 이와 같은 질문 (코드를 디버깅하는 데 도움을 줄 사람을 물어 보는 곳)에는 실제로 실행할 수있는 작은 자체 포함 데모 프로젝트가 포함되어야합니다. –