0

c++ を使用して Win32 api でアプリケーションを作成しようとしていますが、バーなしでフルスクリーンにしたいのですが、成功しましたが、背景画像にまだ問題があります。画像が繰り返されていますが、私はそれを引き伸ばしたいです。何か考えはありますか?コードの以下の部分:

int WINAPI WinMain (HINSTANCE cetteInstance, HINSTANCE precedenteInstance,
LPSTR lignesDeCommande, int modeDAffichage)
{
HWND fenetrePrincipale;
MSG message;
WNDCLASS classeFenetre;

instance = cetteInstance;


classeFenetre.style = 0;
classeFenetre.lpfnWndProc = procedureFenetrePrincipale;
classeFenetre.cbClsExtra = 0;
classeFenetre.cbWndExtra = 0;
classeFenetre.hInstance = NULL;
classeFenetre.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION));
classeFenetre.hCursor = LoadCursor(NULL, IDC_ARROW);
   // classeFenetre.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
//classeFenetre.hbrBackground = CreatePatternBrush(LoadBitmap( instance, MAKEINTRESOURCE("images\Image1.bmp" ) ) );
HBITMAP hbmp = LoadBitmap(instance,MAKEINTRESOURCE(IDB_BITMAP1));
    if(NULL == hbmp)
    {
        MessageBox(NULL,L"BitMap Loading Failed.",L"Error",MB_ICONEXCLAMATION | MB_OK);
    }
    else
    {
        HBRUSH hbr = CreatePatternBrush(hbmp);
        if(NULL == hbr)
        {
            MessageBox(NULL,L"Brush Creation Failed.",L"Error",MB_ICONEXCLAMATION | MB_OK);
        }
        else
        {
            //StretchBlt();
            HDC hdcMem = GetDC (NULL) ;
            HDC wndHDC = GetDC (fenetrePrincipale) ;
            StretchBlt(hdcMem, 0, 0, 800, 600, wndHDC, 0, 0, 1280, 1024, SRCCOPY);
            classeFenetre.hbrBackground = hbr ;



        }
    }
classeFenetre.lpszMenuName = NULL;
classeFenetre.lpszClassName = L"classeF";

//fullscreen mode and delete minimize and max buttons


// On prévoit quand même le cas où ça échoue
if(!RegisterClass(&classeFenetre)) return FALSE;
//WS_OVERLAPPEDWINDOW
    fenetrePrincipale = CreateWindow(L"classeF", L"Ma premiere fenetre winAPI !",WS_MAXIMIZE|WS_POPUP ,
                               CW_USEDEFAULT, CW_USEDEFAULT, 800, 630,
                                               NULL,
                                               NULL,//LoadMenu(instance, L"ID_MENU"),
                                               cetteInstance,
                                               NULL);
if (!fenetrePrincipale) return FALSE;

//ShowWindow(fenetrePrincipale, modeDAffichage);

ShowWindow(fenetrePrincipale,SW_MAXIMIZE);
UpdateWindow(fenetrePrincipale);


while (GetMessage(&message, NULL, 0, 0))
{
    TranslateMessage(&message);
    DispatchMessage(&message);
}
return message.wParam;

}

ありがとう

4

2 に答える 2

2

正確なコードは示されていませんが、ビットマップをロードし、そこからブラシを作成し、そのブラシをウィンドウのブラシとして設定しているようです。ブラシは確かに、あなたが報告する繰り返し画像の動作につながります. ストレッチされたビットマップを取得するには、ブラシ関連のコードをスキップできます。代わりに、WM_ERASEBKGNDウィンドウに送信されたメッセージを処理します。StretchBltその中で、ビットマップをウィンドウのクライアント領域に描画するために呼び出します。HDC描画先は、メッセージの引数wParamで指定されます。

于 2013-01-02T15:49:18.970 に答える
0

手順 1, CreateWindowEx でウィンドウを作成する

2、ウィンドウをすべてのウィンドウとフルスクリーンの上に配置する SetWindowPos

3、Windows の WindowProce ハンドル WM_PAINT メッセージで

4, ビットマップを読み込む

5, CreateCompatibleDC を使用してメモリ DC を作成する

6, SelectObject を呼び出して、ビットマップをメモリ dc に選択します

7、準備されたメモリDCをソースとして使用して、実際のDCにStretchBltを実行します。適切にストレッチするには、ビットマップの実際の幅と高さを知っておく必要があります

于 2013-01-02T17:58:18.843 に答える