对于嵌入式开发,实现功能和界面分离太重要了,面对领导不同的更换UI,用DirectUI极为方便,具体用法如下:
DirectUI 的很多例子都是用Win32写的,而对于我这种几乎不用Win32 的人来说,还是想办法把它改到MFC下吧,这样一个过程是在创建MFC窗口之前,在CMFCAPPApp::InitInstance()中加入DirectUI::CPaintManagerUI::SetResourceInstance(CWinApp::m_hInstance);
tString tstrSkin = CPaintManagerUI::GetInstancePath() + _T("skins\\360SafeSkin\\");
DirectUI::CPaintManagerUI::SetSkinPath(tstrSkin.c_str());
获取到你要解析的XML路径,然后再CMFCAPPDlg::OnInitDialog()中,Create你要的窗口,而这个窗口就是你编写好的xml文件,利用UIDesigner可以方便快捷的写一个页面出来,解析配置文件就是在你的窗口中用Notify接收你的鼠标或者键盘的消息响应,不能用MFC中的快捷方式去添加消息响应,因为DirectUI 的使用基于WinCE,用MFC框架的话函数会在OnInitDialog()里面循环,走不到类似于OnMouseMove()这样的函数中,另外MFC有自己的窗口,即使有触发的机会,也只是触发MFC这个窗口的消息,与你XML写的窗口没有任何关系,因此在用到DirectUI的时候,功能的实现就只能用Win32的HandleMessage()来处理消息的响应了,这也是比较麻烦的,在实现OnMouseMove的时候,记得要在函数中把bHandle赋值为FALSE,因为你要保证在HandleMessage中要执行MessageHandle函数,让CPaintManageUI通知视图,这样你点击按钮的时候才会有反应,否则只是触发OnLButtonDown这一类的函数。
常见错误:fatal error C1189: #error : ERROR: Use of C runtime library internal header file.
解决办法:在用到sk_wince60这个库时,在该项目的Properties中,点击C/C++,preprocessor,在该地址上写上 NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;WINCE;$(ARCHFAM);$(_ARCHFAM_);STANDARDSHELL_UI_MODEL,就可以了,这对于Win32和MFC都是一样的
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。