minigui 处理细节

news/2024/7/5 6:27:25

minigui 控件处理细节

(2023-05-00 00:00:00)
转载
标签:

杂谈

分类:minigui
来源:(http://blog.sina.com.cn/s/blog_684a74300100j2fx.html) - 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透明风格就可以

 

 

 

 



http://www.niftyadmin.cn/n/4747437.html

相关文章

老子的软件之道 - 道篇 26 应用软件的根基

摘要&#xff1a;老子哲学 道德经 软件哲学、软件之道 参阅&#xff1a;序消灭人狼软件的十大命题编程规则 圣人曰&#xff1a;重为轻根&#xff0c;静为躁君。是以君子终日行不离轻重。虽有荣观燕处超然。奈何万乘之主而以身轻天下。轻则失根&#xff0c;躁则失君。 本文先哲…

MiniGUI编程-细节

MiniGUI编程--列表框 分类&#xff1a; minigui2009-11-04 20:40列表框LBS(ListBoxStyle)以CTRL_LIST/"list"为类名调用CreateWindow多选风格:LBS_MULTIPLESEL高级风各&#xff1a;LBS_USEICONLBS_CHECKBOXLBS_AUTOCHECK加上边框WS_BORDER加垂直滚动条WS_VSCROLL加水…

你的成功在于你每天养成的习惯

收藏 要成功&#xff0c;就马上准备有所付出吧&#xff01;这就是每天你应该养成的习惯。 1、不说“不可能”&#xff1b; 2、凡事第一反应&#xff1a; 找方法&#xff0c;不找借口&#xff1b; 3、遇到挫折对自己说声&#xff1a;太好了&#xff0c;机会来了&#xff01; 4、…

阿甘正传 收藏

今天早上看了阿甘正传觉得&#xff0c;我们还是得抽点时间看看电影&#xff0c;特别是像《阿甘正传》这种有韵味的电影&#xff0c;里面的人生哲学真的很值得人们去深思。我已经好久没写博客了&#xff0c;很多朋友觉得我的日志给了他们很大的启发&#xff0c;其实我的很多思想…

老子的软件之道 - 道篇 27 团队管理的真谛

摘要&#xff1a;老子哲学 道德经 软件哲学、软件之道 参阅&#xff1a;序消灭人狼软件的十大命题编程规则 圣人曰&#xff1a;善行无辙迹。善言无瑕谪。善数不用筹策。善闭无关楗而不可开。善结无绳约而不可解。是以圣人常善救人&#xff0c;故无弃人。常善救物&#xff0c;故…

指针、结构体、联合体的安全规范

指针、结构体、联合体的安全规范分类&#xff1a; C2009-12-06 14:35指针赋予了C编程最大的灵活性&#xff1b;结构体使得C程序整齐而紧凑&#xff1b;联合体在某些要求注重效率的场合有精彩的表现&#xff0c;这三个要素是C语言的精华。 然而&#xff0c;精华并不意味着完美&a…

用DBUtils实现对数据库的操作

首先是环境的搭建&#xff1a; 1、导入所用的包 2、在src下建立一个xml文件&#xff0c;用来存放c3p0&#xff08;它是一个开源的JDBC连接池&#xff09; 内容如下图所示&#xff1a;&#xff08;根据自己的需求修改里面的值&#xff0c;比如数据库名&#xff09; 建立一个新…

解决头文件相互包含问题的方法

Posted on 2006-12-12 23:25 sunrack 阅读(1137) 评论(0) 编辑 收藏 所属分类: Visual C 2005 所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。一般情况下&#xff0c;C/C要求所有的类型必须在使用前被定义&#xff0c;但是在一些特殊情况下&#xff0c;这种…