Bagikan melalui


pesan WM_PAINT

Pesan WM_PAINT dikirim ketika sistem atau aplikasi lain membuat permintaan untuk melukis sebagian jendela aplikasi. Pesan dikirim ketika fungsi UpdateWindow atau RedrawWindow dipanggil, atau oleh fungsi DispatchMessage saat aplikasi mendapatkan pesan WM_PAINT dengan menggunakan fungsi GetMessage atau PeekMessage .

Jendela menerima pesan ini melalui fungsi WindowProc-nya .

LRESULT CALLBACK WindowProc(
  HWND hwnd, 
  UINT  uMsg, 
  WPARAM wParam, 
  LPARAM lParam     
);

Parameter

wParam

Parameter ini tidak digunakan.

lParam

Parameter ini tidak digunakan.

Menampilkan nilai

Aplikasi mengembalikan nol jika memproses pesan ini.

Contoh

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);

            // All painting occurs here, between BeginPaint and EndPaint.
            FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
            EndPaint(hwnd, &ps);
        }
        return 0;
    }

    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

Contoh dari Sampel Klasik Windows di GitHub.

Keterangan

Pesan WM_PAINT dihasilkan oleh sistem dan tidak boleh dikirim oleh aplikasi. Untuk memaksa jendela menggambar ke konteks perangkat tertentu, gunakan pesan WM_PRINT atau WM_PRINTCLIENT . Perhatikan bahwa ini memerlukan jendela target untuk mendukung pesan WM_PRINTCLIENT . Kontrol yang paling umum mendukung pesan WM_PRINTCLIENT .

Fungsi DefWindowProc memvalidasi wilayah pembaruan. Fungsi ini juga dapat mengirim pesan WM_NCPAINT ke prosedur jendela jika bingkai jendela harus dicat dan mengirim pesan WM_ERASEBKGND jika latar belakang jendela harus dihapus.

Sistem mengirim pesan ini ketika tidak ada pesan lain dalam antrean pesan aplikasi. DispatchMessage menentukan tempat untuk mengirim pesan; GetMessage menentukan pesan mana yang akan dikirim. GetMessage mengembalikan pesan WM_PAINT ketika tidak ada pesan lain dalam antrean pesan aplikasi, dan DispatchMessage mengirim pesan ke prosedur jendela yang sesuai.

Jendela mungkin menerima pesan cat internal sebagai akibat dari memanggil RedrawWindow dengan bendera RDW_INTERNALPAINT diatur. Dalam hal ini, jendela mungkin tidak memiliki wilayah pembaruan. Aplikasi dapat memanggil fungsi GetUpdateRect untuk menentukan apakah jendela memiliki wilayah pembaruan. Jika GetUpdateRect mengembalikan nol, aplikasi tidak perlu memanggil fungsi BeginPaint dan EndPaint .

Aplikasi harus memeriksa lukisan internal yang diperlukan dengan melihat struktur data internalnya untuk setiap pesan WM_PAINT , karena pesan WM_PAINT mungkin disebabkan oleh wilayah pembaruan non-NULL dan panggilan ke RedrawWindow dengan set bendera RDW_INTERNALPAINT.

Sistem mengirim pesan WM_PAINT internal hanya sekali. Setelah pesan WM_PAINT internal dikembalikan dari GetMessage atau PeekMessage atau dikirim ke jendela oleh UpdateWindow, sistem tidak memposting atau mengirim pesan WM_PAINT lebih lanjut sampai jendela tidak valid atau sampai RedrawWindow dipanggil lagi dengan bendera RDW_INTERNALPAINT diatur.

Untuk beberapa kontrol umum, pemrosesan pesan WM_PAINT default memeriksa parameter wParam . Jika wParam non-NULL, kontrol mengasumsikan bahwa nilainya adalah HDC dan cat menggunakan konteks perangkat tersebut.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung
Windows 2000 Server [hanya aplikasi desktop]
Header
Winuser.h (termasuk Windows.h)

Lihat juga

Gambaran Umum Melukis dan Menggambar

Melukis dan Menggambar Pesan

BeginPaint

DefWindowProc

DispatchMessage

EndPaint

GetMessage

GetUpdateRect

PeekMessage

RedrawWindow

UpdateWindow

WM_ERASEBKGND

WM_NCPAINT

WM_PRINT

WM_PRINTCLIENT