minigui 控件处理细节

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

 

 

你可能感兴趣的:(minigui 控件处理细节)