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

#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);

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值