SetBkMode与SetBkColor的区别(代码搞定一切!!)

来源:互联网 发布:动态发光字网络生成. 编辑:程序博客网 时间:2024/06/01 15:12

#include<windows.h>

 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,

                 HINSTANCE hPrevInstance,

                 PSTR szCmdLine,

                 int iCmdShow){

    static TCHAR szAppName[]= TEXT("MyPen");

    HWND hwnd;

    MSG msg;

    WNDCLASS wndclass;

 

    wndclass.style = CS_HREDRAW | CS_VREDRAW;

    wndclass.lpfnWndProc = WndProc;

    wndclass.cbClsExtra = 0;

    wndclass.cbWndExtra = 0;

    wndclass.hInstance = hInstance;

    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);

    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);

    wndclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);

    wndclass.lpszMenuName =NULL;

    wndclass.lpszClassName = szAppName;

 

    if(!RegisterClass(&wndclass)){

        MessageBox(NULL, TEXT("Register failure..."),

            szAppName, MB_ICONERROR);

        return 0;

    }

 

    hwnd = CreateWindow(szAppName,

        szAppName,

        WS_OVERLAPPEDWINDOW,

        CW_USEDEFAULT,

        CW_USEDEFAULT,

        CW_USEDEFAULT,

        CW_USEDEFAULT,

        NULL,

        NULL,

        hInstance,

        NULL);

 

    ShowWindow(hwnd, iCmdShow);

    UpdateWindow(hwnd);

 

    while(GetMessage(&msg,NULL, 0, 0)){

        DispatchMessage(&msg);

        TranslateMessage(&msg);

    }

    return msg.wParam;

}

 

LRESULT CALLBACK WndProc(HWND hwnd,

                         UINT message,

                         WPARAM wParam,

                         LPARAM lParam){

    static int cxClient, cyClient, i;

    HDC hdc;

    PAINTSTRUCT ps;

    HPEN hPen;

    LOGPEN logPen;

 

    switch(message){

    case WM_SIZE:

        cxClient = LOWORD(lParam);

        cyClient = HIWORD(lParam);

        i = 0;

        return 0;

 

    case WM_PAINT:

        hdc = BeginPaint(hwnd,&ps);

        SetBkColor(hdc, RGB(0, 255, 255));

        // 注释运行和不注释它运行

        // SetBkMode(hdc, TRANSPARENT);//若为OPAQUE标志则与上面一样

 

        switch(i){

        case 0:

            hPen = CreatePen(PS_SOLID, 2, RGB(10, 10, 10));

            break;

        case 1:

            hPen = CreatePen(PS_DASH, 1, RGB(20, 20, 20));

            break;

        case 2:

            hPen = CreatePen(PS_DOT, 1,  RGB(255, 30, 30));

            break;

        case 3:

            hPen = CreatePen(PS_DASHDOT, 1, RGB(40, 40, 40));

            break;

        case 4:

            hPen = CreatePen(PS_DASHDOTDOT, 1, RGB(50, 50, 50));

            break;

        case 5:

            logPen.lopnStyle = PS_SOLID;

            logPen.lopnColor = RGB(0, 60, 60);

            /* 

             * 此处是非常有意思的,下面有说明

             */

            logPen.lopnWidth.x = 5;

            hPen = CreatePenIndirect(&logPen);

            break;

        default:

            hPen =(HPEN) GetStockObject(BLACK_PEN);

            break;

        }

 

        SelectObject(hdc, hPen);

        MoveToEx(hdc, 0,(i + 1)* cyClient / 10,NULL);

        LineTo(hdc, cxClient,(i + 1)* cyClient / 10);

 

        TextOut(hdc, i* cxClient / 7, 4 * cyClient / 5,"windows", lstrlen("windows"));

        if(i++<= 5)

            InvalidateRect(hwnd,NULL,FALSE);

        EndPaint(hwnd, &ps);

        // 删除GDI对象, 释放内存!!

 

        DeleteObject(hPen);

        return 0;

 

        case WM_DESTROY:

            PostQuitMessage(0);

            return 0;

    }

    return DefWindowProc(hwnd, message, wParam, lParam);

}