当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » C/C++  » 图形界面开发/GUI/CGI
achellies的马甲

DirectUI界面库

achellies的马甲 发布于 2011年06月02日 7时, 39评/88528阅
分享到: 
收藏 +0
1
国内首个开源 的directui 界面库,开放,共享,惠众,共赢,遵循bsd协议,可以免费用于商业项目,目前支持Windows 32 、Window CE、Mobile等平台。

代码片段(5) [全屏查看所有代码]

1. [代码][C/C++/Objective-C]代码     跳至 [1] [全屏预览]

#ifndef __UICONTROL_H__
#define __UICONTROL_H__

#pragma once

namespace DuiLib {

/////////////////////////////////////////////////////////////////////////////////////
//

typedef CControlUI* (CALLBACK* FINDCONTROLPROC)(CControlUI*, LPVOID);

class UILIB_API CControlUI
{
public:
    CControlUI();
    virtual ~CControlUI();

public:
    virtual CStdString GetName() const;
    virtual void SetName(LPCTSTR pstrName);
    virtual LPCTSTR GetClass() const;
    virtual LPVOID GetInterface(LPCTSTR pstrName);
    virtual UINT GetControlFlags() const;

    virtual bool Activate();
    virtual CPaintManagerUI* GetManager() const;
    virtual void SetManager(CPaintManagerUI* pManager, CControlUI* pParent, bool bInit = true);
    virtual CControlUI* GetParent() const;

    // 文本相关
    virtual CStdString GetText() const;
    virtual void SetText(LPCTSTR pstrText);

    // 图形相关
    DWORD GetBkColor() const;
    void SetBkColor(DWORD dwBackColor);
    DWORD GetBkColor2() const;
    void SetBkColor2(DWORD dwBackColor);
    DWORD GetBkColor3() const;
    void SetBkColor3(DWORD dwBackColor);
    LPCTSTR GetBkImage();
    void SetBkImage(LPCTSTR pStrImage);
    DWORD GetBorderColor() const;
    void SetBorderColor(DWORD dwBorderColor);
	DWORD GetFocusBorderColor() const;
	void SetFocusBorderColor(DWORD dwBorderColor);
    int GetBorderSize() const;
    void SetBorderSize(int nSize);
    SIZE GetBorderRound() const;
    void SetBorderRound(SIZE cxyRound);
    bool DrawImage(HDC hDC, LPCTSTR pStrImage, LPCTSTR pStrModify = NULL);

    // 位置相关
    virtual const RECT& GetPos() const;
    virtual void SetPos(RECT rc);
    virtual int GetWidth() const;
    virtual int GetHeight() const;
    virtual int GetX() const;
    virtual int GetY() const;
    virtual RECT GetPadding() const;
    virtual void SetPadding(RECT rcPadding); // 设置外边距,由上层窗口绘制
    virtual SIZE GetFixedXY() const;         // 实际大小位置使用GetPos获取,这里得到的是预设的参考值
    virtual void SetFixedXY(SIZE szXY);      // 仅float为true时有效
    virtual int GetFixedWidth() const;       // 实际大小位置使用GetPos获取,这里得到的是预设的参考值
    virtual void SetFixedWidth(int cx);      // 预设的参考值
    virtual int GetFixedHeight() const;      // 实际大小位置使用GetPos获取,这里得到的是预设的参考值
    virtual void SetFixedHeight(int cy);     // 预设的参考值
    virtual int GetMinWidth() const;
    virtual void SetMinWidth(int cx);
    virtual int GetMaxWidth() const;
    virtual void SetMaxWidth(int cx);
    virtual int GetMinHeight() const;
    virtual void SetMinHeight(int cy);
    virtual int GetMaxHeight() const;
    virtual void SetMaxHeight(int cy);
    virtual void SetRelativePos(SIZE szMove,SIZE szZoom);
    virtual void SetRelativeParentSize(SIZE sz);
    virtual TRelativePosUI GetRelativePos() const;
    virtual bool IsRelativePos() const;

    // 鼠标提示
    virtual CStdString GetToolTip() const;
    virtual void SetToolTip(LPCTSTR pstrText);

    // 快捷键
    virtual TCHAR GetShortcut() const;
    virtual void SetShortcut(TCHAR ch);

    // 菜单
    virtual bool IsContextMenuUsed() const;
    virtual void SetContextMenuUsed(bool bMenuUsed);

    // 用户属性
    virtual const CStdString& GetUserData(); // 辅助函数,供用户使用
    virtual void SetUserData(LPCTSTR pstrText); // 辅助函数,供用户使用
    virtual UINT_PTR GetTag() const; // 辅助函数,供用户使用
    virtual void SetTag(UINT_PTR pTag); // 辅助函数,供用户使用

    // 一些重要的属性
    virtual bool IsVisible() const;
    virtual void SetVisible(bool bVisible = true);
    virtual void SetInternVisible(bool bVisible = true); // 仅供内部调用,有些UI拥有窗口句柄,需要重写此函数
    virtual bool IsEnabled() const;
    virtual void SetEnabled(bool bEnable = true);
    virtual bool IsMouseEnabled() const;
    virtual void SetMouseEnabled(bool bEnable = true);
    virtual bool IsFocused() const;
    virtual void SetFocus();
    virtual bool IsFloat() const;
    virtual void SetFloat(bool bFloat = true);

    virtual CControlUI* FindControl(FINDCONTROLPROC Proc, LPVOID pData, UINT uFlags);

    void Invalidate();
    bool IsUpdateNeeded() const;
    void NeedUpdate();
    void NeedParentUpdate();

    virtual void Init(TEventUI& event);
    virtual void DoInit();

    virtual void Event(TEventUI& event);
    virtual void DoEvent(TEventUI& event);

    virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
    CControlUI* ApplyAttributeList(LPCTSTR pstrList);

    virtual SIZE EstimateSize(SIZE szAvailable);

    virtual void DoPaint(HDC hDC, const RECT& rcPaint);
    virtual void PaintBkColor(HDC hDC);
    virtual void PaintBkImage(HDC hDC);
    virtual void PaintStatusImage(HDC hDC);
    virtual void PaintText(HDC hDC);
    virtual void PaintBorder(HDC hDC);

    virtual void DoPostPaint(HDC hDC, const RECT& rcPaint);

public:
    CEventSource OnInit;
    CEventSource OnDestroy;
    CEventSource OnEvent;

protected:
    CPaintManagerUI* m_pManager;
    CControlUI* m_pParent;
    CStdString m_sName;
    bool m_bUpdateNeeded;
    bool m_bMenuUsed;
    RECT m_rcItem;
    RECT m_rcPadding;
    SIZE m_cXY;
    SIZE m_cxyFixed;
    SIZE m_cxyMin;
    SIZE m_cxyMax;
    bool m_bVisible;
    bool m_bInternVisible;
    bool m_bEnabled;
    bool m_bMouseEnabled;
    bool m_bFocused;
    bool m_bFloat;
    bool m_bFloatSetPos; // 防止SetPos循环调用
    TRelativePosUI m_tRelativePos;

    CStdString m_sText;
    CStdString m_sToolTip;
    TCHAR m_chShortcut;
    CStdString m_sUserData;
    UINT_PTR m_pTag;

    DWORD m_dwBackColor;
    DWORD m_dwBackColor2;
    DWORD m_dwBackColor3;
    CStdString m_sBkImage;
    DWORD m_dwBorderColor;
	DWORD m_dwFocusBorderColor;
    int m_nBorderSize;
    SIZE m_cxyBorderRound;
    RECT m_rcPaint;
};

} // namespace DuiLib

#endif // __UICONTROL_H__

2. [图片] 27324_1306898364h7wh.jpg    

3. [图片] qq1.png    

4. [图片] 27324_1306899161S87a.jpg    

5. [图片] 27324_1306898750hKK7.jpg    



开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(39)

  • 1楼:你条草 发表于 2011-06-02 08:47 回复此评论
    哪里有下载包呢……俺需要
  • 2楼:achellies的马甲 发表于 2011-06-02 09:01 回复此评论

    引用来自“你条草”的评论

    哪里有下载包呢……俺需要
    请访问google code,search duilib即可。。。。
  • 3楼:xuanye 发表于 2011-06-02 09:11 回复此评论
    看上去好酷啊
  • 4楼:achellies的马甲 发表于 2011-06-02 09:14 回复此评论
    有需要的小盆友可以关注  http://www.oschina.net/p/duilib
  • 5楼:你条草 发表于 2011-06-02 09:16 回复此评论
    感谢了!
  • 6楼:Lunar_Lin 发表于 2011-06-02 09:45 回复此评论
      :  ) 一直在关注, 祝你们越做越好!!  
  • 7楼:铂金小鬼 发表于 2011-06-02 11:21 回复此评论
    请问支持win7 64吗,还是只是32位的?谢谢!
  • 8楼:了墨 发表于 2011-06-02 13:15 回复此评论
    木有编译成功~~囧~
  • 9楼:achellies的马甲 发表于 2011-06-02 13:24 回复此评论

    引用来自“wenjing”的评论

    木有编译成功~~囧~
    提示什么错误?
  • 10楼:achellies的马甲 发表于 2011-06-02 13:25 回复此评论

    引用来自“蓄势减肥男”的评论

    请问支持win7 64吗,还是只是32位的?谢谢!
    64位应该也是支持的,不过还没有测试过,可以帮忙测试一下。
  • 11楼:NorthGod 发表于 2011-06-05 21:33 回复此评论
    啥时候能有个详细的说明文档啊,再有个类似wxWidgets那些RAD工具的东西就更好了
  • 12楼:zhanghuahua 发表于 2011-06-09 11:20 回复此评论
    开源中的UIDesigner控件太少了。
  • 13楼:o^_^o 发表于 2011-06-09 13:42 回复此评论

    UIDesigner不是很好用!!!

  • 14楼:navyblue 发表于 2011-06-09 16:13 回复此评论
    这个不错,去看看
  • 15楼:烟和雾 发表于 2011-06-15 21:02 回复此评论
    VS2010下,两个都通不过
    错误    7    error LNK1104: 无法打开文件“..\bin\DuiLib_ud.lib”    C:\Documents and Settings\Administrator\桌面\duilib\UIDesigner\LINK    UIDesigner

    错误    10    error LNK1104: 无法打开文件“.\Debug/360Safe.map”    C:\Documents and Settings\Administrator\桌面\duilib\360SafeDemo\LINK    360Safe
    错误    11    error LNK1104: 无法打开文件“.\Debug/ListDemo.map”    C:\Documents and Settings\Administrator\桌面\duilib\ListDemo\LINK    ListDemo
    错误    14    error LNK1104: 无法打开文件“.\Debug/TestApp1.map”    C:\Documents and Settings\Administrator\桌面\duilib\TestApp1\LINK    TestApp1
    错误    24    error LNK1104: 无法打开文件“.\Debug/GameDemo.map”    C:\Documents and Settings\Administrator\桌面\duilib\GameDemo\LINK    GameDemo
    错误    27    error LNK1104: 无法打开文件“.\Debug/JSDemo.map”    C:\Documents and Settings\Administrator\桌面\duilib\JSDemo\LINK    JSDemo
    错误    30    error LNK1104: 无法打开文件“.\Debug/FlashDemo.map”    C:\Documents and Settings\Administrator\桌面\duilib\FlashDemo\LINK    FlashDemo

  • 16楼:郭竞 发表于 2011-06-22 13:56 回复此评论
    这个库目前好像只支持C,不能用别的语言调用。还有个炫彩的,支持其他语言,但是错误比较多。个人开发的。
  • 17楼:achellies的马甲 发表于 2011-06-24 15:42 回复此评论

    引用来自“烟和雾”的评论

    VS2010下,两个都通不过
    错误    7    error LNK1104: 无法打开文件“..\bin\DuiLib_ud.lib”    C:\Documents and Settings\Administrator\桌面\duilib\UIDesigner\LINK    UIDesigner

    错误    10    error LNK1104: 无法打开文件“.\Debug/360Safe.map”    C:\Documents and Settings\Administrator\桌面\duilib\360SafeDemo\LINK    360Safe
    错误    11    error LNK1104: 无法打开文件“.\Debug/ListDemo.map”    C:\Documents and Settings\Administrator\桌面\duilib\ListDemo\LINK    ListDemo
    错误    14    error LNK1104: 无法打开文件“.\Debug/TestApp1.map”    C:\Documents and Settings\Administrator\桌面\duilib\TestApp1\LINK    TestApp1
    错误    24    error LNK1104: 无法打开文件“.\Debug/GameDemo.map”    C:\Documents and Settings\Administrator\桌面\duilib\GameDemo\LINK    GameDemo
    错误    27    error LNK1104: 无法打开文件“.\Debug/JSDemo.map”    C:\Documents and Settings\Administrator\桌面\duilib\JSDemo\LINK    JSDemo
    错误    30    error LNK1104: 无法打开文件“.\Debug/FlashDemo.map”    C:\Documents and Settings\Administrator\桌面\duilib\FlashDemo\LINK    FlashDemo

    这种错误。。。。哎,自己想想,这不是库的问题。
  • 18楼:烟和雾 发表于 2011-06-24 15:56 回复此评论
    呵呵,已经搞掂了~~
  • 19楼:logens 发表于 2011-10-21 11:19 回复此评论

    请问这个IE控件如何添加呀?

  • 20楼:lanyzh0909 发表于 2012-02-03 16:14 回复此评论
    看了楼主的写的这个库,再看看自己写的那个UI库,惭愧啊!向楼主看齐~~加油!
开源从代码分享开始 分享代码
achellies的马甲的其它代码 全部(4)...