zl程序教程

您现在的位置是:首页 >  后端

当前栏目

10Static静态文本框

静态 文本框
2023-09-11 14:21:07 时间

Static 静态文本框

 

本例讲解静态文本框,从上面的图片可以看出,有三种颜色,其中绿色就是文本框(static)(本质就是一个窗口),而红色就是文本框上的字体,蓝色就是字体的背景颜色。

 

在前面讲过,按钮的本质就是窗口,那么此例的文本框也是一个窗口。

 

步骤:

1.创建出文本框

char str[128]="书山有路勤为径,\n学海无涯苦作舟。";

CreateWindowEx(0,"static",str,WS_CHILD|WS_VISIBLE|SS_NOTIFY,4,4,150,50,hWnd,NULL,hInst,0);

与按钮的区别:

与按钮不同的是第二个参数,按钮是”button”,而文本框是” static”。

 

WM_CTLCOLORSTATIC-----CTL代表Ctrl。。。

 

2.设置不同的背景颜色和字体颜色

hOldBrush=CreateSolidBrush(RGB(0,255,0));

         case WM_CTLCOLORSTATIC:

                   {

                            //字体颜色

                            SetTextColor((HDC)wParam,RGB(255,0,0));

                            //背景颜色

                            SetBkColor((HDC)wParam,RGB(0,0,255));

                            if(bFlat)

                            //背景是否透明

                            SetBkMode((HDC)wParam,OPAQUE);// OPAQUE 不透明

                            else

                            SetBkMode((HDC)wParam,TRANSPARENT);//TRANSPARENT 透明

                            return (LRESULT)hOldBrush;

                            //return 0;       

                   }

                   break;

 

注意点:

1. (HDC)wParam 存放当前窗口的DC。

2. WM_CTLCOLORSTATIC,必须返回一个画刷的句柄。若返回其他数值,0,FALSE,TRUE,无法将背景颜色、字体颜色显示出来。

3. hOldBrush,可以自己创建CreateSolidBrush(),也可以利用系统存在的画刷,如下。

hOldBrush=GetSysColorBrush(COLOR_WINDOWFRAME);

 

源代码:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    static HGDIOBJ hOldBrush;
    static bool bFlat=false;
    char str[128]="书山有路勤为径,\n学海无涯苦作舟。";
    switch (message)
    {
    case WM_CREATE:
        CreateWindowEx(0,"static",str,WS_CHILD|WS_VISIBLE|SS_NOTIFY,4,4,150,50,hWnd,NULL,hInst,0);
        //系统画刷
        //hOldBrush=GetSysColorBrush(COLOR_WINDOWFRAME);
        //自定义画刷    
hOldBrush=CreateSolidBrush(RGB(0,255,0));
        break;
    case WM_CTLCOLORSTATIC:
        {
            //字体颜色
            SetTextColor((HDC)wParam,RGB(255,0,0));
            //背景颜色
            SetBkColor((HDC)wParam,RGB(0,0,255));
            if(bFlat)
            //背景是否透明
            SetBkMode((HDC)wParam,OPAQUE);// OPAQUE不透明
            else
            SetBkMode((HDC)wParam,TRANSPARENT);//TRANSPARENT 透明
            return (LRESULT)hOldBrush;
            //return 0;    
        }
        break;
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // 分析菜单选择:
        switch (wmId)
        {
        //第二个文本框,进行背景对比
        case IDM_ABOUT:
    CreateWindowEx(0,"static",str,WS_CHILD|WS_VISIBLE|SS_NOTIFY,160,4,150,50,hWnd,NULL,hInst,0);
            bFlat=true;
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: 在此添加任意绘图代码...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}