1,控制項的隱藏 ShowWindow( GetDlgItem( hwnd, IDC_PROMPT ), SW_HIDE );
2、控制項之間切換
( 1 ) 使用WS_EX_TOPMOST風格,然後用Tab鍵 。
( 2 ) 在MSG_KEYDOWN中截取訊息,然後用SetFocusChild函數 。
3、去掉對話方塊上的關閉按扭 用 WS_EX_NOCLOSEBOX 風格
4、改變和移動視窗大小 SetWindowPos() or MoveWindow()
*控制項前景色彩設定 ( 包括標題列、邊框、字型等 )
SetWindowElementColorEx( hwnd, item, color ) 且用 UpdateWindow( hwnd, TRUE )重新整理
*修改edit , staic控制項的前景色彩 SetWindowElementColorEx( pshwnd, FGC_CONTROL_NORMAL,COLOR_red );
* 修改button控制項的前景色彩 SetWindowElementColorEx( pshwnd, WED_3DBOX_REVERSE,COLOR_red );
*控制項背景色設定 SetWindowBkcolor() 且用 InvalidateRect( hwnd, NULL, TRUE ) 重新整理
*設定控制項字型 SetWindowFont (GetDlgItem(hDlg,IDCANCEL1), font0); font0 為建立的邏輯字型
*控制項的透明 MiniGUI2.0.3及以前版本不支援透明視窗,但是支援透明控制項。建立透明控制項:如果想在一個視窗上建立一個透明特性的控制項,在建立視窗的時候加上
WS_EX_TRANSPARENT 風格。支援透明特性的控制項如下:靜態框、編輯框、按鈕(單選鈕和複選框)、列表框(除圖片列表框)、進度條、工具列、滑塊、
scrollview控制項、樹型控制項、列表型控制項、旋鈕控制項、酷工具列、動畫控制項和iconview控制項(在表徵圖及文字處不可透明,這些以外的控制項地區可以,圖片為透明也可以)。
例如:(1) CreateWindowEx( "edit", "Close", WS_CHILD|BS_PUSHBUTTON |BS_NOTIFY|WS_VISIBLE,WS_EX_TRANSPARENT,
IDOK1+4, 100, 20, 90,38,hDlg,0 );
(註:CreateWindow(class_name, caption, style, id, x, y, w, h, parent, add_data)即為:
CreateWindowEx(class_name, caption, style, 0,id, x, y, w, h, parent, add_data) )
(2): 在對話方塊中如下
{
"button",
WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
200, 220, 90, 38,
IDCANCEL1,
"Cancel", 0,
WS_EX_TRANSPARENT
},
static CTRLDATA CtrlYourTaste[] =
{
"edit",
WS_VISIBLE ,
70, 220, 90, 38,
IDOK1,
"ok", 0,
WS_EX_TRANSPARENT
},
*普通按鈕上顯示位元影像或表徵圖 位元影像使用BS_BITMAP風格,表徵圖使用BS_ICON風格 例如:
CreateWindow("button","Close", WS_CHILD|BS_PUSHBUTTON|BS_ICON|BS_REALSIZEIMAGE|BS_NOTIFY|WS_VISIBLE,IDOK1+1,
100, 120, 90, 38,hDlg,(DWORD)GetSystemBitmap ( SYSBMP_ARROWS ) );
CreateWindow("button","Close", WS_CHILD|BS_PUSHBUTTON|BS_ICON|BS_REALSIZEIMAGE|BS_NOTIFY|WS_VISIBLE,IDOK1+1,
100, 120, 90, 38,hDlg,(DWORD)GetSmallSystemIcon( IDI_STOP ) );
CreateWindow("button","Close", WS_CHILD|BS_PUSHBUTTON|BS_ICON|BS_REALSIZEIMAGE|BS_NOTIFY|WS_VISIBLE,IDOK1+2,
200, 120, 90, 38,hDlg,(DWORD)LoadIconFromFile( HDC_SCREEN,"myicon.ico",0));
在對話方塊中如下:
{
CTRL_BUTTON,
WS_TABSTOP |BS_PUSHBUTTON| WS_VISIBLE|BS_BITMAP ,
170, 100, 60, 25,
IDCANCEL,
"cancel",
(DWORD)GetSystemBitmap( SYSBMP_ARROWS )
}
{
CTRL_BUTTON, // 按鈕BS_BITMAP
WS_TABSTOP | BS_PUSHBUTTON| WS_VISIBLE|BS_BITMAP ,
100, 100, 60, 25,
IDOK,
"OK",
(DWORD)&bmp_bkgnd
},
{
"static", //靜態框為SS_BITMAP
WS_TABSTOP | WS_VISIBLE|SS_BITMAP ,
170, 100, 60, 25,
IDCANCEL,
"cancel",
(DWORD)&bmp_bkgnd
*視窗的關閉:
PostMessage (hWnd, MSG_CLOSE, 0, 0); 近似相當於 DestroyMainWindow( hWnd ); PostQuitMessage( hWnd );
如何設定文本前景色彩和背景色:
(1), 擷取DC : BeginPaint(hwnd)
(2),設定文本背景顏色: SetBkColor( hdc, color )
(3) 設定文本前景顏色(即字型顏色): SetTextColor( hdc,color )
(4)最後文本輸出即可: TextOut( hdc, x, y, text )
當DC為建立的DC時:即
mem_dc = CreateMemDC( 640, 480, 16,MEMDC_FLAG_HWSURFACE |
MEMDC_FLAG_SRCALPHA ,
0x0000F000, 0x00000F00, 0x000000F0, 0x000000F );
此時DC的設定與應用函數是:
SetBrushColor (mem_dc, RGBA2Pixel (mem_dc, 0x00, 0x00, 0xFF, 0xFF));
FillBox (mem_dc, 10, 10, 200, 50);
SetPenColor( mem_dc, RGB2Pixel (mem_dc, 0x00,0xFF,0x00 ));
SetPenWidth( mem_dc, 3 );
LineEx( mem_dc, 0, 0, 100, 100 );
SetTextColor( mem_dc,RGBA2Pixel (mem_dc, 0x00, 0x00, 0xFF, 0xFF));
SetBkColor( mem_dc, RGBA2Pixel (mem_dc, 0x00, 0xFF, 0x00, 0xFF) );
TextOut( mem_dc, 10, 10, "您好!");
BitBlt (mem_dc, 0, 0, 0, 0, hdc, 0, 0, 0);
DeleteMemDC( mem_dc );
4,設定文本 的字型 (1) 建立字型
font0=CreateLogFont( FONT_TYPE_NAME_SCALE_TTF,
"arial", "ISO8859-1",
FONT_WEIGHT_BOOK,FONT_SLANT_ROMAN,FONT_SETWIDTH_NORMAL, FONT_OTHER_AUTOSCALE,
FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE, 256, 0 );
(2) 選擇和 使用字型 case MSG_PAINT:
hdc=BeginPaint(hDlg);
SelectFont(hdc,font0);
TextOut(hdc, 30, 10,"OK");
EndPaint( hDlg, hdc );
return 0;
5,* 設定輸出文本背景透明
hdc = BeginPaint (hDlg);
SetBkColor( hdc, COLOR_transparent );
SetBkMode( hdc,BM_TRANSPARENT );
DrawText (hdc, msg_text, -1, &msg_rc, DT_LEFT | DT_WORDBREAK);
EndPaint (hDlg, hdc);
6,
| |
擷取當前使用中視窗的控制代碼, 使用 GetActiveWindow 函數, 擷取當前焦點控制項的控制代碼, 使用 GetFocusChild 函數.
我的源碼如下: static struct Menu_Struct *CreateMenuDMode(POINT pos,HWND hWnd) { static int i; struct Menu_Struct *hWndMenu = NULL; HDC hdc; BITMAP bmp,bmp1; static RECT rect={0,0,800,480}; InvalidateRect(hWnd , &rect , TRUE); hdc = GetDC (hWnd); LoadBitmap (HDC_SCREEN, &bmp, "./back/4.bmp"); LoadBitmap (HDC_SCREEN, &bmp1, "./back/dqzs.bmp"); FillBoxWithBitmap (hdc, 1, 1, 799, 479, &bmp); SetBrushColor (hdc, RGBA2Pixel (hdc, 0xE1, 0xFF, 0xE1, 0xFF)); ReleaseDC(hdc); hWndMenu = (struct Menu_Struct *) malloc(sizeof(struct Menu_Struct) + (menu_item_nums[MENU_D_MODE]-1)*sizeof(HWND)); hWndMenu->num = menu_item_nums[MENU_D_MODE]; hdc = BeginPaint (hWnd);//希望能夠畫上其他顏色 SetBkColor (hdc, PIXEL_black);// SetBkMode(hdc, BM_TRANSPARENT);// EndPaint (hWnd, hdc); // hWndMenu->pItem[0] = CreateWindowEx(CTRL_STATIC, D_MODE_ITEM[0], WS_CHILD | WS_VISIBLE |SS_CENTER, WS_EX_TRANSPARENT, IDC_D_MENU, pos.x, pos.y, MENU_BUTTON_W ,MENU_BUTTON_H*0.75, hWnd, 0); for(i=1;i<menu_item_nums[MENU_D_MODE];i++) { hdc = BeginPaint (hWnd); SetBkColor (hdc, PIXEL_black); SetBkMode(hdc, BM_TRANSPARENT); hWndMenu->pItem[i] = CreateWindowEx(CTRL_BUTTON, D_MODE_ITEM[i], WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON, WS_EX_TRANSPARENT , IDC_D_MENU+i, pos.x, pos.y+i*MENU_BUTTON_H, MENU_BUTTON_W ,MENU_BUTTON_H*0.75, hWnd,0); EndPaint (hWnd, hdc); } UnloadBitmap (&bmp); return hWndMenu; } 先添一個背景圖,爾後建立按鈕。我現在的問題是,建立出的控制項顏色為系統色彩(灰色),不是透明的,靜態框底色是白的,也是透明的,非常困惑。 我希望他們都沒有背景色,直接將我匯入的圖片透出來。 |
|
|
| 加一個WS_EX_TRANSPARENT透明風格就可以 |
|
|
|