精华内容
下载资源
问答
  • setbkmode

    2020-07-04 20:29:43
    void setbkmode(int mode); 参数 mode 指定图案填充和文字输出时的背景模式,可以是以下值: 值 描述 OPAQUE 背景用当前背景色填充(默认)。 TRANSPARENT 背景是透明的。 返回值 无 示例 ...

    这个函数用于设置当前设备图案填充和文字输出时的背景模式。

    void setbkmode(int mode);

     

    参数

    mode

    指定图案填充和文字输出时的背景模式,可以是以下值:

    描述
    OPAQUE 背景用当前背景色填充(默认)。
    TRANSPARENT 背景是透明的。

    返回值

    示例

    展开全文
  • SetBkMode

    2013-01-25 16:23:48
    SetBkMode与SetBkColor理解展开 基本概述 原型: 参数: SetBkMode与SetBkColor理解展开 编辑本段基本概述 原型: 一是MFC里面封装的CDC类: CDC::SetBkMode int SetBkMode( int nBkMode ); ...

    编辑本段基本概述

    原型:

    一是MFC里面封装的CDC类:
    CDC::SetBkMode
    int SetBkMode( int nBkMode );
    API函数SetBkMode声明如下:
    int SetBkMode(
    HDC hdc, // handle of device context
    int iBkMode // flag specifying background mode
    );

    参数:

    hDC是当前设备的句柄。
    mode是要设置的模式,其值可以为OPAQUE和TRANSPARENT。
    输出的字符串时,发现存在背景色,这样的输出是破坏背景的。那需要使用什么方法来保持背景不变,而又能输出红色的字符串呢?比如按钮的文字颜色是黑色的,而背景是灰色的。这就需要使用SetBkMode函数来设置DrawText函数的输出方式,显示设备共有两种输出方式:OPAQUE和TRANSPARENT。OPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,也就是文字的背景是不改变的。
    对透明的理解:在窗体或控件输出的字符串或图形是有背景色的。而窗体或控件也是有背景色的。这两种背景色一般是不同的, 这样输出图形或字符串时,两种背景(窗体或控件的背景色、符串或图形的背景色)重叠在一起了,影响美观,为了不让这两种背景重叠,可以设置背景模式为TRANSPARENT(透明的),即让输出的字符串或图形的背景色不可见。可以这样理解:把输出的字符串或图形的背景色看成是一物体,窗体或控件看成另一物体,字符串或图形在窗体或控件前面挡住窗体或控件了(因为输出 的字符串或图形是画在窗体或控件上的,所以可以这么类比),但是透过字符串或图形能看到窗体或控件。即字符串或图形的背 景色所代表的物体是透明的。

    编辑本段SetBkMode与SetBkColor理解

    以前总不是太明白这几者之间的关系:SetBkMode, SetBkColor, wndclass.hbrBackground,
    说实在的, 还是拿程序说话, 写个程序就能明白了……
    我们以前一次的一个程序来说明:
    /* 画笔练习程序, by netrookie, ChinaUnix.
    * 请参考《windows程序设计》第五章:图形基础,画笔部分
    * 此程序通过一个switch结构, 告诉我们怎样创建画笔和删除画笔。
    */
    #include <windows.h>
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    int WINAPI WinMain(HINSTANCEhInstance,
    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 = 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);
    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 = 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);
    }
    一运行终于明白了
    展开全文
  • SetBkMode函数

    2016-06-21 06:21:46
    上面已经介绍输出红色的字符串时,...这就需要使用SetBkMode函数来设置DrawText函数的输出方式,显示设备共有两种输出方式:OPAQUE和TRANSPARENT。OPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSP
    上面已经介绍输出红色的字符串时,发现背景的黑色也变成白色了,这样的输出是破坏背景的。那需要使用什么方法来保持背景不变,而又能输出红色的字符串呢?比如按钮的文字颜色是黑色的,而背景是灰色的。这就需要使用SetBkMode函数来设置DrawText函数的输出方式,显示设备共有两种输出方式:OPAQUETRANSPARENTOPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,也就是文字的背景是不改变的。
     
    函数SetBkMode声明如下:
    WINGDIAPI int   WINAPI SetBkMode(__in HDC hdc, __in int mode);
    hDC是当前设备的句柄。
    mode是要设置的模式。
    函数返回值是前一次设置的模式。
     
    调用这个函数的例子如下:
    #001 //
    #002 //界面显示输出.
    #003 //
    #004 //
    #005 //
    #006 void CCaiWinMsg::OnDraw(HDC hDC)
    #007 {
    #008  //
    #009  std::wstring strShow(_T("C++窗口类的实现,2007-08-27"));
    #010  
    #011  //设置输出字符串的颜色.
    #012  COLORREF crOld = SetTextColor(hDC,RGB(255,0,0));
    #013 
    #014  RECT rcText;    
    #015  rcText.left = 10;
    #016  rcText.top = 10;
    #017  rcText.right = 300;
    #018  rcText.bottom = 80;
    #019 
    #020  //创建黑色的画刷,
    #021  HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 0));
    #022 
    #023  //用黑色的画刷填充四边形的颜色.
    #024  FillRect(hDC,&rcText,hbrush);
    #025 
    #026  //删除画刷.
    #027  DeleteObject(hbrush);
    #028 
    #029 
    #030  rcText.left = 10;
    #031  rcText.top = 10;
    #032  rcText.right = 300;
    #033  rcText.bottom = 40;
    #034 
    #035  //显示字符串在四边形的中间位置.
    #036  DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
    #037         DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
    #038 
    #039 
    #040  rcText.left = 10;
    #041  rcText.top = 40;
    #042  rcText.right = 300;
    #043  rcText.bottom = 80;
    #044  //设置透明背景
    #045  int nOldMode = SetBkMode(hDC,TRANSPARENT);
    #046 
    #047  //显示字符串在四边形的中间位置.
    #048  DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
    #049         DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
    #050 
    #051  //恢复原来的模式.
    #052  SetBkMode(hDC,nOldMode);
    #053 
    #054  //恢复原来的颜色.
    #055  SetTextColor(hDC,crOld);
    #056 }
     
    本程序运行的效果图如下:
    展开全文
  • SetBkMode函数理解

    2017-09-13 18:28:23
    这就需要使用SetBkMode函数来设置DrawText函数的输出方式,显示设备共有两种输出方式:OPAQUE和TRANSPARENT。OPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,

    输出的字符串时,发现存在背景色,这样的输出是破坏背景的。那需要使用什么方法来保持背景不变,而又能输出红色的字符串呢?比如按钮的文字颜色是黑色的,而背景是灰色的。这就需要使用SetBkMode函数来设置DrawText函数的输出方式,显示设备共有两种输出方式:OPAQUE和TRANSPARENT。OPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,也就是文字的背景是不改变的。

    函数SetBkMode声明如下:
    WINGDIAPI int   WINAPI SetBkMode(__in HDC hdc, __in int mode);
    hDC是当前设备的句柄。
    mode是要设置的模式。
    函数返回值是前一次设置的模式。

    调用这个函数的例子如下:

    void CCaiWinMsg::OnDraw(HDC hDC)
    {
      //
    std::wstring strShow(_T("C++窗口类的实现,2007-08-27"));
      
    //设置输出字符串的颜色.
    COLORREF crOld = SetTextColor(hDC,RGB(255,0,0));

    RECT rcText;    
    rcText.left = 10;
    rcText.top = 10;
    rcText.right = 300;
    rcText.bottom = 80;

    //创建黑色的画刷,
    HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 0));

    //用黑色的画刷填充四边形的颜色.
    FillRect(hDC,&rcText,hbrush);

    //删除画刷.
    DeleteObject(hbrush);


    rcText.left = 10;
    rcText.top = 10;
    rcText.right = 300;
    rcText.bottom = 40;

    //显示字符串在四边形的中间位置.
    DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
           DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);

    rcText.left = 10;
    rcText.top = 40;
    rcText.right = 300;
    rcText.bottom = 80;
    //设置透明背景
    int nOldMode = SetBkMode(hDC,TRANSPARENT);

    //显示字符串在四边形的中间位置.
    DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
           DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);

    //恢复原来的模式.
    SetBkMode(hDC,nOldMode);

    //恢复原来的颜色.
      SetTextColor(hDC,crOld);
    }

     

    //设置透明背景。
     /* 对透明的理解:在窗体或控件输出的字符串或图形是有背景色的。而窗体或控件也是有背景色的。这两种背景色一般是不同的,
        这样输出图形或字符串时,两种背景(窗体或控件的背景色、符串或图形的背景色)重叠在一起了,影响美观,为了不让这两种
        背景重叠,可以设置背景模式为TRANSPARENT(透明的),即让输出的字符串或图形的背景色不可见。可以这样理解:把输出的
        字符串或图形的背景色看成是一物体,窗体或控件看成另一物体,字符串或图形在窗体或控件前面挡住窗体或控件了(因为输出
        的字符串或图形是画在窗体或控件上的,所以可以这么类比),但是透过字符串或图形能看到窗体或控件。即字符串或图形的背
        景色所代表的物体是透明的

     */

     

    第一次显示是使用OPAQUE的方式显示。
    第二次显示是使用TRANSPARENT的方式显示。
    本程序运行的效果图如下:

    展开全文
  • SetBkMode函数用法详解

    千次阅读 2017-08-18 13:47:16
    这就需要使用SetBkMode函数来设置DrawText函数的输出方式,显示设备共有两种输出方式:OPAQUE和TRANSPARENT。OPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,
  • 函数原型: int SetBkMode( HDC hdc, int mode );
  • 1、SetBkMode原型声明: WINGDIAPI int WINAPI SetBkMode(_In_ HDC hdc, _In_ int mode) 设置背景模式,mode取值:OPAQUE(不透明),TRANSPARENT(透明) 2、SetMapMode原型声明: WINGDIAPI int WINAPI ...
  • SetBkMode与SetBkColor理解

    2013-06-04 10:31:00
    SetBkColor是背景颜色,SetBkMode是背景模式。 SetBkMode(hdc,TRANSPARENT); This function sets the background mix mode of the specified device context. The background mix mode is used with text, hatched...
  • Windows API一日一练 27 SetBkMode函数
  • SetBkMode透明,需要重绘
  • The SetBkMode function sets the background mix mode of the specified device context. The background mix mode is used with text, hatched brushes, and pen styles that are not solid lines. SetBk...
  • SetBkMode(TRANSPARENT)

    千次阅读 2011-05-05 19:21:00
    SetBkMode(TRANSPARENT)的含义是设置背景透明,到底是什么意思呢。 可以这样理解,文字本身是有底色的,底色与控件颜色不一样的话,可能就出现重影,而TRANSPARENT便是消除了这种底色,也可以理解为它设置文字的...
  • CDC::SetBkMode

    千次阅读 2008-04-20 11:49:00
    int SetBkMode( int nBkMode );返回值是先前的背景模式。参数nBkMode 指定下列模式之一:OPAQUE(译为“不透明”)主要是文字背景,画刷阴影.....TRANSPARENT 透明
  • 主目录传送门 ... 本次学习的源码模板下载: 1.百度云:... 学习目标: 在Win32API-13-14-窗口关闭和窗口显示文字版本上改变一块区域的背景色并且在输出文字时不会影响背景色 ...新增函数解释SetBkMode 1....
  • 如题,谢谢!setfillcolor和setcolor以及setbkcolor,setbkmode这些函数有什么区别呢?分别代表什么意思呢?
  • pDC->SetBkMode(TRANSPARENT);使文本背景与控件背景一样。这个函数只能去掉文字的背景,默认情况下,一个文字是一个方块,文字用文本前景,背景用文字背景(可能和窗口背景不一样),使用这个函数后,文字背景就透明了(和...
  • 不要拿SetBkColor,SetBkMode设置整个窗口的背景色啦!! SetBkColor的作用范围 根据目前的经验,setBkColor只在两个地方好用:  1.填充空隙(Gaps):此处空隙,指的是点式画笔或虚线画笔之间的空隙。参见...
  • Windows API一日一练(27)SetBkMode函数

    万次阅读 2007-09-01 20:56:00
    上面已经介绍输出红色的字符串时,...这就需要使用SetBkMode函数来设置DrawText函数的输出方式,显示设备共有两种输出方式:OPAQUE和TRANSPARENT。OPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSP
  • 关于SetBkMode(TRANSPARENT) 设置透明窗口

    千次阅读 2007-11-15 15:48:00
    关于SetBkMode(TRANSPARENT)pDC->SetBkMode(TRANSPARENT);使文本背景与控件背景一样。这个函数只能去掉文字的背景,默认情况下,一个文字是一个方块,文字用文本前景,背景用文字背景(可能和窗口背景不一样),使用这个...
  • Windows API一日一练(27)SetBkMode函数 上面已经介绍输出红色的字符 串时,发现背景的黑色也变成白色了,这样的输出是破坏背景的。那需要使用什么方法来保持背景不变,而又能输出红色的字符串呢?比如...
  • 3.讲解Win32 API函数:beginpath(),SetBkMode(),endpath(),StrokePath() SetWindowRgn() 有人用“GetGlyphOutline()”去实现,而这里用简单的方法就做到了。 使用“beginpath”可以打开画布的“path bracket”, ...
  • 一个在场景中输出文字的例子: HDC MemDC; //建立一个HDC的对象。 SetTextColor(MemDC,RGB... SetBkMode(MemDC,TRANSPARENT); //把MemDC场景中的文字背景变为透明。 TextOut(MemDC,150,100,cc,lstrlen(cc)); //在Me

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 306
精华内容 122
关键字:

setbkmode