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。
截图:
看了下代码,觉得挺像wtl的,不过貌似封装的比wtl少
LZ你好,今天在网上闲逛的时候看到了这个库
一直想找一个这样的轻量级库,让人眼前一亮
我把源文件和hello world都下载下来了,编译时出现错误:
1>—— 已启动生成: 项目: KWinUITest, 配置: Debug Win32 ——
1>正在编译…
1>hello.cpp
1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kwin.h(375) : error C2065: “LWA_ALPHA”: 未声明的标识符
1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kwin.h(376) : error C2039: “SetLayeredWindowAttributes”: 不是“`global namespace’”的成员
1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kwin.h(376) : error C2660: “kwinui::KWindow::SetLayeredWindowAttributes”: 函数不接受 4 个参数
1>kdlgtemplatebuilder.cpp
1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kdlgtemplatebuilder.cpp(90) : warning C4311: “reinterpret_cast”: 从“LPTSTR”到“unsigned int”的指针截断
1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kdlgtemplatebuilder.cpp(97) : warning C4311: “reinterpret_cast”: 从“LPTSTR”到“unsigned int”的指针截断
1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kdlgtemplatebuilder.cpp(123) : warning C4311: “类型转换”: 从“WORD *”到“ULONG”的指针截断
1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kdlgtemplatebuilder.cpp(127) : warning C4312: “类型转换”: 从“ULONG”转换到更大的“WORD *”
1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kdlgtemplatebuilder.cpp(133) : error C2653: “kwin”: 不是类或命名空间名称
开发环境是VS2005
请教
@float
一、”1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kwin.h(375) : error C2065: “LWA_ALPHA”: 未声明的标识符
1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kwin.h(376) : error C2039: “SetLayeredWindowAttributes”: 不是“`global namespace’”的成员”
——————-
出现这个问题应该是你的windows SDK版本太低,尝试更新到最新的SDK应该能解决该问题。我用VC++ 2008 Express + 较新版本SDK,没有问题。
二、”1>c:\documents and settings\float\my documents\visual studio 2005\projects\kwinuitest\kwinuitest\kdlgtemplatebuilder.cpp(133) : error C2653: “kwin”: 不是类或命名空间名称”
——————
这个是我的疏忽,没有把此处的命名空间改过来,现在代码已经更新,可以重新下载。不过Hello World应该用不到这个方法才对,很奇怪,我的没有此错误提示。
看来关于KWinUI的开发环境和测试环境应该做一下说明,发布的时候忘了说了:(
@proguru
感谢大大的热心回答!
File: kwin.h Line: 654 wcx.lpszClassName error