注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

deisp的博客

 
 
 

日志

 
 

自定义控件:黑背景浅蓝色边框和字体的文本显示框 - minigui - wmmwang  

2008-09-02 11:38:22|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
姓名:王敏敏职业:学生年龄:25 位置:东南大学个性介绍:




一个例子(创建自定义控件:黑背景浅蓝色边框和字体的文本显示框)
#include <stdio.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
/***********************************************************************
*** 函数原型:static int ColorEditConProc (HWND hwnd, int message, WPARAM wParam, LPARAM lParam)
              static BOOL RegisterColorEditControl (void)
              static void UnregisterColorEditControl (void)
*** 参数说明:
*** 返回值  :
*** 创建人  :王敏敏
*** 最后修改:
*** 描述    :"浅蓝色边框黑色背景编辑框"控件,这里利用Minigui中的自定义控件实现。包括:
              其回调函数(ColorEditConProc);
              注册这个控件(RegisterColorEditControl);
              注销这个控件(UnregisterColorEditControl)
************************************************************************/
static int ColorEditConProc (HWND hwnd, int message, WPARAM wParam, LPARAM lParam)
{  
  HDC hdc; 
  RECT rc;                 // rc为文本矩形
   
    GetClientRect(hwnd, &rc); // 取得控件的大小   
   
    switch(message)
    {
        case MSG_CREATE:
            SetWindowBkColor(hwnd, COLOR_black);
        break;
       
        case MSG_PAINT:
            hdc = BeginPaint (hwnd);   
            //SetBkMode(hdc, BM_TRANSPARENT);    // 让文本框背景透明                
           
            // 设置边框颜色-浅蓝色,并绘制边框 
            SetPenColor(hdc, RGB2Pixel (hdc, 11, 244 , 244));                       
            Rectangle (hdc, rc.left, rc.top, rc.right-1, rc.bottom-1);
            // 设置文本颜色——浅蓝色,文本背景色——黑色
            SetTextColor(hdc, RGB2Pixel (hdc, 11, 244 , 244));         
            SetBkColor(hdc, COLOR_black);                              
            rc.right = rc.right-3;  // 文字到右边框留的距离为3         
            // 输出文本内容,右对齐、上下居中显示
            DrawText(hdc, GetWindowCaption (hwnd), -1, &rc, DT_RIGHT | DT_VCENTER | DT_SINGLELINE);
            EndPaint (hwnd, hdc);
            break;                 
      
                 
        case MSG_SETTEXT:  // 此消息是为了使得SetDlgItemText()函数(此函数会发出MSG_SETTEXT消息)可用
           // 将设置的文本保存到caption中
           SetWindowCaption (hwnd, (char*)lParam);
          
            hdc = GetClientDC (hwnd);
            // 设置边框颜色-绿色,并绘制边框                        
            SetPenColor(hdc, RGB2Pixel (hdc, 9, 225 , 24));              
            Rectangle (hdc, rc.left, rc.top, rc.right, rc.bottom-1);              
            // 设置文本颜色——浅蓝色,文本背景色——黑色                  
            SetTextColor(hdc, RGB2Pixel (hdc, 11, 244 , 244));         
            SetBkColor(hdc, COLOR_black);                              
            rc.right = rc.right-3;  // 文字到右边框留的距离为3                    
            // 用黑色刷新文字区域
            SetBrushColor(hdc, 0);           
            FillBox (hdc, rc.left+1, rc.top+1, rc.right-rc.left-1, rc.bottom-rc.top-2); // 加1减1目的是为了防止把边框刷掉
            // 输出文本内容,右对齐、上下居中显示
            DrawText(hdc, (char*)lParam, -1, &rc, DT_NOCLIP | DT_RIGHT | DT_VCENTER | DT_SINGLELINE);
            ReleaseDC (hdc);     
            break;   
    }
   
    // DefaultControlProc()调用DefaultMainWinProc(),其内包含对MSG_GETTEXT消息的处理
    return DefaultControlProc (hwnd, message, wParam, lParam); 
}
    MyClass.spClassName = "coloredit";
    MyClass.dwStyle     = WS_NONE;
    MyClass.dwExStyle   = WS_EX_NONE;
    MyClass.hCursor     = GetSystemCursor (IDC_ARROW);
    MyClass.iBkColor    = COLOR_black;
    MyClass.WinProc     = ColorEditConProc;
static void UnregisterColorEditControl (void)
{
    UnregisterWindowClass ("coloredit");
}
/***********************************************************************
*** 函数原型:static int MenuWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
*** 参数说明:
*** 返回值  :
*** 创建人  :王敏敏
*** 最后修改:
*** 描述    :主窗口回调函数
************************************************************************/
static int MenuWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)

    switch (message) {
        case MSG_CREATE:
            CreateWindow ("coloredit", "王敏敏",
              WS_VISIBLE, 101,
              80, 11, 80, 30,
              hWnd, 0);
            break;
           
        case MSG_CLOSE:
            DestroyMainWindow (hWnd);
            // 注销自定义控件
            UnregisterColorEditControl ();
            PostQuitMessage (hWnd);
            break;
    }

/***********************************************************************
*** 函数原型:int MiniGUIMain (int argc, const char* argv[])
*** 参数说明:
*** 返回值  :
*** 创建人  :王敏敏
*** 最后修改:
*** 描述    :主程序入口函数
************************************************************************/
int MiniGUIMain (int argc, const char* argv[])
{
    MSG Msg;
    HWND hMainWnd;
    MAINWINCREATE CreateInfo;
#ifdef _LITE_VERSION
    SetDesktopRect(0, 0, 578, 555);
#endif
   
    // 注册自定义控件
    RegisterColorEditControl();
    CreateInfo.dwStyle = WS_VISIBLE ;
    CreateInfo.dwExStyle = WS_EX_NONE;
    CreateInfo.spCaption = "";
    CreateInfo.hMenu = 0;
    CreateInfo.hCursor = GetSystemCursor(0);
    CreateInfo.hIcon = 0;
    CreateInfo.MainWindowProc = MenuWinProc;
    CreateInfo.lx = 0;
    CreateInfo.ty = 0;
    CreateInfo.rx = 578;
    CreateInfo.by = 555;
    CreateInfo.iBkColor = COLOR_lightgray;
    CreateInfo.dwAddData = 0;
    CreateInfo.hHosting = HWND_DESKTOP;
   
    hMainWnd = CreateMainWindow (&CreateInfo);
   
    if (hMainWnd == HWND_INVALID)
        return -1;
    ShowWindow(hMainWnd, SW_SHOWNORMAL);
    while (GetMessage(&Msg, hMainWnd)) {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    MainWindowThreadCleanup (hMainWnd);
此控件的关键的是要对MSG_SETTEXT这个消息自己进行添加内容,否则,利用SetDlgItemText()函数进行修改显示内容(即caption)是不能显示的。
 发表于: 2008-04-01,修改于: 2008-04-01 09:26 已浏览395次,有评论0条 推荐 投诉







引文来源  自定义控件:黑背景浅蓝色边框和字体的文本显示框 - minigui - wmmwang
  评论这张
 
阅读(535)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017