CTRL_STATIC
文本
通过 SS_SIMPLE 风格创建的控件只用来显示单行文本,也就是说,控件文本不会自动换行显示,并且文本永远是左对齐的。
通过 SS_LEFT、SS_CENTER 或 SS_RIGHT 风格创建的静态框可用来显示多行文本,并分别以左对齐、中对齐和右对齐方式显 示文本。
通过 SS_LEFTNOWORDWRAP 风格创建的静态框会扩展文本中的 TAB 符,但不做自动换行处理。
位图/图标
通过 SS_BITMAP 或者 SS_ICON,这种静态框会显示一幅位图或者图标,需要在创建静态框时通过dwAddData 参数设定要显示的位图对象指针或者图标对象句柄。
和这两类静态框相关联的风格有 SS_CENTERIMAGE 和SS_REALSIZEIMAGE。默认情况下,位图和图标要经过适当的缩放充满整个静态框,但使用 SS_REALSIZEIMAGE 风格将取消缩放操作,并显示在静态框的左上方,如果在使用 SS_REALSIZEIMAGE 的同时使用 SS_CENTERIMAGE 风格,则会在控件中部显示位图或图标。
分组框
通过SS_GROUPBOX 设定静态框为分组框。分组框内可以创建的控件有:静态框、按钮、简单编辑框、单行编辑框、多行编辑框、列 表框、滑块和菜单按钮。
填充与边框
SS_WHITERECT:以白色填充静态框矩形。
SS_GRAYRECT:以灰色填充静态框矩形。
SS_BLACKRECT:以黑色填充静态框矩形。
SS_GRAYFRAME:灰色边框。
SS_WHITEFRAME:白色边框。
SS_BLACKFRAME:黑色边框。
消息
STM_GETIMAGE:该消息返回位图的指针或者图标句柄。
STM_SETIMAGE:通过 wParam 参数重新设置位图指针或者图标句柄,并且返回原来的指针。
通知
当静态框风格中包含 SS_NOTIFY 时,静态框会产生如下两个通知消息:
STN_DBLCLK:表示用户在静态框内双击了鼠标左键。
STN_CLICKED:表示用户在静态框内单击了鼠标左键。
mg-samples的静态框示例
1 #include <stdio.h> 2 3 #include <minigui/common.h> 4 #include <minigui/minigui.h> 5 #include <minigui/gdi.h> 6 #include <minigui/window.h> 7 #include <minigui/control.h> 8 9 #define CAPTION "Static Control Demo" 10 #define PROMPTA "Please double click here" 11 #define PROMPTB "You just double click here:)" 12 #define PROMPTC "You just click here:)" 13 14 static void my_notif_proc (HWND hwnd, int id, int nc, DWORD add_data) 15 { 16 if (nc == STN_DBLCLK) 17 SetWindowText (hwnd, PROMPTB); 18 else if(nc == STN_CLICKED) 19 SetWindowText (hwnd, PROMPTC); 20 } 21 22 static int StaticDemoWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) 23 { 24 HWND hwnd; 25 26 switch (message) { 27 case MSG_CREATE: 28 hwnd = CreateWindow (CTRL_STATIC, PROMPTA, 29 WS_VISIBLE | SS_CENTER | SS_NOTIFY, 30 50, 55, 95, 200, 20, hWnd, 0); 31 SetNotificationCallback (hwnd, my_notif_proc); 32 return 0; 33 34 case MSG_DESTROY: 35 DestroyAllControls (hWnd); 36 return 0; 37 38 case MSG_CLOSE: 39 DestroyMainWindow (hWnd); 40 PostQuitMessage (hWnd); 41 return 0; 42 } 43 44 return DefaultMainWinProc(hWnd, message, wParam, lParam); 45 } 46 47 int MiniGUIMain (int argc, const char* argv[]) 48 { 49 MSG Msg; 50 HWND hMainWnd; 51 MAINWINCREATE CreateInfo; 52 53 #ifdef _MGRM_PROCESSES 54 JoinLayer(NAME_DEF_LAYER , "static" , 0 , 0); 55 #endif 56 57 CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; 58 CreateInfo.dwExStyle = WS_EX_NONE; 59 CreateInfo.spCaption = CAPTION; 60 CreateInfo.hMenu = 0; 61 CreateInfo.hCursor = GetSystemCursor(0); 62 CreateInfo.hIcon = 0; 63 CreateInfo.MainWindowProc = StaticDemoWinProc; 64 CreateInfo.lx = 0; 65 CreateInfo.ty = 0; 66 CreateInfo.rx = 320; 67 CreateInfo.by = 240; 68 CreateInfo.iBkColor = COLOR_lightwhite; 69 CreateInfo.dwAddData = 0; 70 CreateInfo.hHosting = HWND_DESKTOP; 71 72 hMainWnd = CreateMainWindow (&CreateInfo); 73 74 if (hMainWnd == HWND_INVALID) 75 return -1; 76 77 ShowWindow(hMainWnd, SW_SHOWNORMAL); 78 79 while (GetMessage(&Msg, hMainWnd)) { 80 TranslateMessage(&Msg); 81 DispatchMessage(&Msg); 82 } 83 84 MainWindowThreadCleanup (hMainWnd); 85 86 return 0; 87 } 88 89 #ifdef _MGRM_THREADS 90 #include <minigui/dti.c> 91 #endif