KWinUI sample 1: Hello World

可能没有比Hello World更适合做第一个sample了。

下面就是KWinUI的Hello World程序。

 1 #include "kwin.h"
 2 #include "kapp.h"
 3
 4 using namespace kwinui;
 5
 6 class KMainWindow : public KWindowBase<KMainWindow>{
 7 public:
 8     KMainWindow():KWindowBase<KMainWindow>(_T("MyClassName")){}
 9
10     BEGIN_MSG_MAP
11         MSG_HANDLER(WM_PAINT,OnPaint)
12     END_MSG_MAP(KWindowBase<KMainWindow>)
13
14     LRESULT OnPaint(UINT uMsg,WPARAM wParam,LPARAM lParam,bool& bHandled){
15         PAINTSTRUCT ps;
16         HDC hDC;
17
18         RECT rect;
19         ::GetClientRect(m_hWnd,&rect);
20         
21         hDC=::BeginPaint(m_hWnd,&ps);
22         ::SetBkMode(hDC,TRANSPARENT);
23         ::DrawText(hDC,_T("Hell World!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
24         ::EndPaint(m_hWnd,&ps);
25
26         return 0;
27     }
28 };
29
30 class KUIThreadApp : public KWinApp<KUIThreadApp>{
31 public:
32     bool InitInstance(){
33         m_pMainWindow=new KMainWindow();
34         m_pMainWindow->CreateOverlappedWindow(_T("Hello World!"));
35         m_pMainWindow->ShowWindow(m_nCmdShow);
36         m_pMainWindow->UpdateWindow();
37
38         return true;
39     }
40     void ExitInstance(){
41         SAFE_DEL_PTR(m_pMainWindow);
42     }
43     
44 private:
45     KMainWindow* m_pMainWindow;
46 };
47
48 KUIThreadApp theApp;

代码下载
用Visual C++ 2008 Express win32 project默认设置静态链接Release版本生成的程序大小为54KB。
截图:hello

6 Replies to “KWinUI sample 1: Hello World”

  1. LZ你好,今天在网上闲逛的时候看到了这个库
    一直想找一个这样的轻量级库,让人眼前一亮
    我把源文件和hello world都下载下来了,编译时出现错误:
    1>—— 已启动生成: 项目: KWinUITest, 配置: Debug Win32 ——
    1>正在编译…
    1>hello.cpp
    1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkwin.h(375) : error C2065: “LWA_ALPHA”: 未声明的标识符
    1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkwin.h(376) : error C2039: “SetLayeredWindowAttributes”: 不是“`global namespace’”的成员
    1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkwin.h(376) : error C2660: “kwinui::KWindow::SetLayeredWindowAttributes”: 函数不接受 4 个参数
    1>kdlgtemplatebuilder.cpp
    1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkdlgtemplatebuilder.cpp(90) : warning C4311: “reinterpret_cast”: 从“LPTSTR”到“unsigned int”的指针截断
    1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkdlgtemplatebuilder.cpp(97) : warning C4311: “reinterpret_cast”: 从“LPTSTR”到“unsigned int”的指针截断
    1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkdlgtemplatebuilder.cpp(123) : warning C4311: “类型转换”: 从“WORD *”到“ULONG”的指针截断
    1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkdlgtemplatebuilder.cpp(127) : warning C4312: “类型转换”: 从“ULONG”转换到更大的“WORD *”
    1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkdlgtemplatebuilder.cpp(133) : error C2653: “kwin”: 不是类或命名空间名称
    开发环境是VS2005
    请教

  2. @float
    一、”1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkwin.h(375) : error C2065: “LWA_ALPHA”: 未声明的标识符
    1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkwin.h(376) : error C2039: “SetLayeredWindowAttributes”: 不是“`global namespace’”的成员”
    ——————-
    出现这个问题应该是你的windows SDK版本太低,尝试更新到最新的SDK应该能解决该问题。我用VC++ 2008 Express + 较新版本SDK,没有问题。

    二、”1>c:documents and settingsfloatmy documentsvisual studio 2005projectskwinuitestkwinuitestkdlgtemplatebuilder.cpp(133) : error C2653: “kwin”: 不是类或命名空间名称”
    ——————
    这个是我的疏忽,没有把此处的命名空间改过来,现在代码已经更新,可以重新下载。不过Hello World应该用不到这个方法才对,很奇怪,我的没有此错误提示。

Leave a Reply

Your email address will not be published. Required fields are marked *