10Static静态文本框
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; }