0

ウィンドウを作成します hwnd = CreateWindowEx(WS_EX_LAYERED, szWindowClass, szTitle,0, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

次に、png画像を表示します

CImage img;
img.Load(Path);
int iWidth = img.GetWidth();
int iHeight = img.GetHeight();
HDC hdcScreen = GetDC(NULL);
HDC hDC = CreateCompatibleDC(hdcScreen);
HBITMAP hBmp = CreateCompatibleBitmap(hdcScreen, iWidth, iHeight);
HBITMAP hBmpOld = (HBITMAP)SelectObject(hDC, hBmp);
img.Draw(hDC,0, 0, iWidth, iHeight, 0, 0, iWidth, iHeight);
BLENDFUNCTION blend = {0};
blend.BlendOp = AC_SRC_OVER;
blend.BlendFlags=0;
blend.SourceConstantAlpha = 255;
blend.AlphaFormat = AC_SRC_ALPHA;
POINT ptPos = {0, 0};
SIZE sizeWnd = {iWidth, iHeight};
POINT ptSrc = {0, 0};
UpdateLayeredWindow(hWnd, hdcScreen, &ptPos, &sizeWnd, hDC, &ptSrc, 0, &blend, ULW_ALPHA);
SelectObject(hDC, hBmpOld);
DeleteObject(hBmp);
DeleteDC(hDC);
ReleaseDC(NULL, hdcScreen);

そして、このウィンドウにプログレスバーなどの静的なコントロール要素をいくつか作成したいと思います。

#define ID_MainProgressBar 2000
HWND MainProgressBar=CreateWindowEx(WS_EX_LAYERED,PROGRESS_CLASS,NULL,WS_CHILD|WS_VISIBLE|PBS_SMOOTH,200,200,180,100,hwnd1,(HMENU)ID_MainProgressBar,hInst,NULL);

そして、私はこの要素を見ることができません。別の質問ですが、コールバック メイン ウィンドウで、またはメイン ウィンドウを作成するときに、HWND MainProgressBar=CreateWindowEx を呼び出す必要がある場所はどこですか?

4

1 に答える 1

1

を使用する場合、ウィンドウ全体の内容をビットマップに描画し、ウィンドウの内容が変更されるたびUpdateLayeredWindow()にそのビットマップを に渡す必要があります。UpdateLayeredWindow()言うまでもなく、子コントロールが関係している場合は機能しません。代わりにSetLayeredWindowAttributes()、それ以外の場合は通常のウィンドウでアルファ/透明度を有効にし (子コントロールを通常どおり使用できるようにするため)、標準WM_PAINTメッセージに応答して PNG をウィンドウに描画します。

于 2013-10-14T16:00:48.237 に答える