minigui 控制項處理細節

來源:互聯網
上載者:User

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透明風格就可以

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.