[ucgui-dev] 回答一个朋友关于如何动态取得BUTTON的text内容的问题.....

  • From: "ucgui" <ucgui@xxxxxxx>
  • To: "ucgui-dev" <ucgui-dev@xxxxxxxxxxxxx>
  • Date: Sat, 22 Apr 2006 17:33:33 +0800

ucgui-dev,您好!

这是首发邮件列表, 希望经邮件列表可以打开沟通交流的大门.....

集思广益...

共同学习...

共同进步....


以下代码即是取得button的text内容的, 其实很简单的, 
主要是理解BUTTON相关的一些东西, text的内容是动态分配的, 在button的
BUTTON_Obj结构中存放了这块动态分配的字符串内容的句柄了, 所以要取些内容, 
只须转化一下即可, 关键的代码如下一句:

GUI_DispStringAt((char*)(WM_HMEM2Ptr((BUTTON_H2P(pMsg->hWinSrc))->hpText)), 
50+(rand()*100)%30, 50+(rand()*100)%30);

加上随机数, 是为了每次点击都让文本show在背景窗体的不同位置.

另外, button控件的一些结构及宏定义, 没有对外开放, 
我这里已经把他们加进到我们要用的地方了....
UCGUI显示没有考虑当我们要扩充的须要, 其它控件也是一样, 用户可以自己更改, 
最好是把结构及宏定义放到头文件中, 比如把他们放在
button.h当中.


#include "DIALOG.h"
#include "stdlib.h"

typedef struct {
  WIDGET Widget;
  GUI_COLOR aBkColor[2];
  GUI_COLOR aTextColor[2];
  const GUI_FONT* pFont;
  const GUI_BITMAP* apBitmap[2];
  WM_HMEM hpText;
  #if BUTTON_SUPPORT_STREAMED_BITMAP
    U8 aBitmapIsStreamed[2];
  #endif
  #if BUTTON_SUPPORT_BITMAP_OFFSET    /* Support for bitmap offsets */
    I16 xOffBitmap[2], yOffBitmap[2];
  #endif
  #ifdef _DEBUG
    int DebugId;
  #endif  
} BUTTON_Obj;

#define BUTTON_H2P(h) (BUTTON_Obj*) WM_HMEM2Ptr(h)

static void _cbBkWindow(WM_MESSAGE* pMsg) {
  int NCode, Id;
 // BUTTON_Obj* hObj;

  switch (pMsg->MsgId) {
    case WM_NOTIFY_PARENT:
      Id    = WM_GetId(pMsg->hWinSrc);    /* Id of widget */
      NCode = pMsg->Data.v;               /* Notification code */
          switch (NCode) {
        case WM_NOTIFICATION_RELEASED:    /* React only if released */
          if (Id == 100) {          /* OK Button */
                        GUI_Clear();
                        
GUI_DispStringAt((char*)(WM_HMEM2Ptr((BUTTON_H2P(pMsg->hWinSrc))->hpText)), 
50+(rand()*100)%30, 50+(rand()*100)%30);
                        //      hObj = BUTTON_H2P(pMsg->hWinSrc);
                        //      
GUI_DispStringAt((char*)(WM_HMEM2Ptr(hObj->hpText)), 150, 150);
          }

          break;
      }
      break;
  case WM_PAINT:
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}



void MainTask(void) {

BUTTON_Handle hButton;
  GUI_Init();

  GUI_SetFont(&GUI_Font24_ASCII);
  GUI_SetColor(GUI_RED);

 hButton=BUTTON_Create  (10,20,100,30,100,WM_CF_SHOW);
  BUTTON_SetFont(hButton,&GUI_Font8_ASCII);
  BUTTON_SetText(hButton,"Click the button...");
//  WM_Paint(hButton);
//  GUI_DispStringAt("test", 150, 150);
  WM_SetCallback(WM_HBKWIN, _cbBkWindow);

        while (1) {
                if (!GUI_Exec())
                        GUI_X_ExecIdle();
        }
}

        致
礼!
                                

        ucgui
        ucgui@xxxxxxx
          2006-04-22

Other related posts:

  • » [ucgui-dev] 回答一个朋友关于如何动态取得BUTTON的text内容的问题.....