循序渐进实现仿QQ界面演示程序编译问题及MFC调用RingSDK图象库示例
2010-01-29 22:46
686 查看
有不少朋友反映《循序渐进实现仿QQ界面》里面的示例程序无法编译或编译有问题,以及希望能有MFC的工程,在此集中解答一下。
演示程序编译问题:
1、演示程序需要最新版本的RingSDK,请先用SVN到svn://svnhost.cn/RingSDK更新到最新版本,推荐用TortoiseSVN。TortoiseSVN的下载地址:http://tortoisesvn.net/downloads,安装后在资源管理器新建RingSDK目录,比如c:/ringsdk,在该文件夹上按鼠标右键,选择“SVN 检出”,输入地址svn://svnhost.cn/RingSDK,按确定就获取到了最新版本的RingSDK。
2、安装platform sdk,可以到微软网站去下或是到如下地址:ftp://platformsdk:platformsdk@61.132.59.166/platform_sdk.zip,如果setup不能安装请用setup 目录里的psdk_x86.msi安装。安装后选择VC菜单Tools->Options...,在弹出的对话框中选择Directories页,Show directories for:下拉框里选择include files,然后在下面列表中确认Platform SDK的include目录是排在第一位。同时把RingSDK的include目录加入列表,如下图:
然后Show directories for:下拉框里选择Library files,确认Platform SDK的lib目录排在第一位,把RingSDK的lib目录加入列表。如果你想调试程序时跟进RingSDK源代码,应该把RingSDK下libsrc下的目录加入到Source files列表里面。
3、编译RingSDK,先打开ringsdk/libsrc/freelib目录下3个子目录里的工程,这是3个第3方库,zlib,png和jpeg库,编译一下。然后打开ringsdk/ringsdk.dsw,编译RingSDK库
4、至此环境已经搭建完成,可以编译ringsdk/example下的示例程序和仿QQ界面的演示程序了。
MFC如何调用RingSDK图象库:
这里有个演示程序,MFC工程,下载地址:http://download.csdn.net/source/2028551
先看看程序截图:
是一个动画异性型窗口,按左键可拖动,按右键弹出菜单可选择退出。在此说明一下步骤,按此步骤可以不用去下这个演示程序,自己就能做出来。
1、新建一MFC对话框工程mfcdibdemo,选择使用MFC静态库。
2、选择VC菜单Project->setting...,General标签页,确认Microsoft Foundation Classes:的选项是Use MFC in a Static Library,然后选择C/C++标签页,Catgory:选择Code Generation,然后在下面的Use run-time library里面选择Debug Multithreaded或Multithreaded,设置完成。
3、把上面的程序截图图片存到本地,加入到资源,资源类型输入"GIF",连引号一起输入,资源ID为IDG_BKG
4、新建菜单资源,如下图:
映射两个菜单项命令函数为OnHelp和OnExit
5、CMfcdibdemoDlg增加WM_LBUTTONDOWN,WM_RBUTTONDOWN,WM_MEARUSEITEM,WM_DRAWITEM,消息的处理
6、代码修改:
mfcdibdemoDlg.h的开始包含图象库和界面库的头文件:
#include "ringdib.h"
#include "ringdows.h"
CMfcdibdemoDlg类增加两个成员变量:
RingDIB m_dib;
RingCoolMenu *m_rm;
修改mfcdibdemoDlg.cpp文件:
CMfcdibdemoDlg::OnInitDialog的最后,//TODO下面添加如下代码:
新增的消息代码:
注意OnMeasureItem和OnDrawItem里面不能调用CDialog::OnMeasureItem和CDialog::OnDrawItem,因为MFC会试图获取MFC的菜单对象但是获取不到,会非法操作。
7、完成,编译程序。
说明:用MFC的话其实不应该用RingSDK界面库,因为都是对窗口,控件做了封装,想要把仿QQ界面程序移植到MFC,应该自己创建MFC窗口和控件,贴图代码可以照搬。
演示程序编译问题:
1、演示程序需要最新版本的RingSDK,请先用SVN到svn://svnhost.cn/RingSDK更新到最新版本,推荐用TortoiseSVN。TortoiseSVN的下载地址:http://tortoisesvn.net/downloads,安装后在资源管理器新建RingSDK目录,比如c:/ringsdk,在该文件夹上按鼠标右键,选择“SVN 检出”,输入地址svn://svnhost.cn/RingSDK,按确定就获取到了最新版本的RingSDK。
2、安装platform sdk,可以到微软网站去下或是到如下地址:ftp://platformsdk:platformsdk@61.132.59.166/platform_sdk.zip,如果setup不能安装请用setup 目录里的psdk_x86.msi安装。安装后选择VC菜单Tools->Options...,在弹出的对话框中选择Directories页,Show directories for:下拉框里选择include files,然后在下面列表中确认Platform SDK的include目录是排在第一位。同时把RingSDK的include目录加入列表,如下图:
然后Show directories for:下拉框里选择Library files,确认Platform SDK的lib目录排在第一位,把RingSDK的lib目录加入列表。如果你想调试程序时跟进RingSDK源代码,应该把RingSDK下libsrc下的目录加入到Source files列表里面。
3、编译RingSDK,先打开ringsdk/libsrc/freelib目录下3个子目录里的工程,这是3个第3方库,zlib,png和jpeg库,编译一下。然后打开ringsdk/ringsdk.dsw,编译RingSDK库
4、至此环境已经搭建完成,可以编译ringsdk/example下的示例程序和仿QQ界面的演示程序了。
MFC如何调用RingSDK图象库:
这里有个演示程序,MFC工程,下载地址:http://download.csdn.net/source/2028551
先看看程序截图:
是一个动画异性型窗口,按左键可拖动,按右键弹出菜单可选择退出。在此说明一下步骤,按此步骤可以不用去下这个演示程序,自己就能做出来。
1、新建一MFC对话框工程mfcdibdemo,选择使用MFC静态库。
2、选择VC菜单Project->setting...,General标签页,确认Microsoft Foundation Classes:的选项是Use MFC in a Static Library,然后选择C/C++标签页,Catgory:选择Code Generation,然后在下面的Use run-time library里面选择Debug Multithreaded或Multithreaded,设置完成。
3、把上面的程序截图图片存到本地,加入到资源,资源类型输入"GIF",连引号一起输入,资源ID为IDG_BKG
4、新建菜单资源,如下图:
映射两个菜单项命令函数为OnHelp和OnExit
5、CMfcdibdemoDlg增加WM_LBUTTONDOWN,WM_RBUTTONDOWN,WM_MEARUSEITEM,WM_DRAWITEM,消息的处理
6、代码修改:
mfcdibdemoDlg.h的开始包含图象库和界面库的头文件:
#include "ringdib.h"
#include "ringdows.h"
CMfcdibdemoDlg类增加两个成员变量:
RingDIB m_dib;
RingCoolMenu *m_rm;
修改mfcdibdemoDlg.cpp文件:
CMfcdibdemoDlg::OnInitDialog的最后,//TODO下面添加如下代码:
//MFC调用RingSDK库必须执行此初始化,第一个参数应该是主窗口句柄,可为NULL,第2个参数必须正确传递 InitRingLib(m_hWnd,AfxGetResourceHandle()); DIBREGFORMAT(GIF); m_dib.Load(MAKEINTRESOURCE(IDG_BKG),"GIF",GIF); m_dib.SetTarget(m_hWnd); m_dib.CreateCoolWindow(); m_rm = new RingCoolMenu; m_rm->LoadPopup(MAKEINTRESOURCE(IDR_POPMENU)); m_rm->SetXPStyle();
新增的消息代码:
void CMfcdibdemoDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDialog::OnLButtonDown(nFlags, point); EasyMove(m_hWnd); } void CMfcdibdemoDlg::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CDialog::OnRButtonDown(nFlags, point); m_rm->Popup(m_hWnd); } void CMfcdibdemoDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) { // TODO: Add your message handler code here and/or call default if(lpMeasureItemStruct->CtlType == ODT_MENU) { LPRINGMENUSTYLE lprms = (LPRINGMENUSTYLE)lpMeasureItemStruct->itemData; if(lprms) { try { lprms->pMenu->MeasureItem(lpMeasureItemStruct); } catch(...) { } } } //CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct); } void CMfcdibdemoDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Add your message handler code here and/or call default if(lpDrawItemStruct->CtlType == ODT_MENU) { LPRINGMENUSTYLE lprms = (LPRINGMENUSTYLE)lpDrawItemStruct->itemData; if(lprms) { try { lprms->pMenu->Draw(lpDrawItemStruct); } catch(...) { } } } //CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct); } void CMfcdibdemoDlg::OnClose() { // TODO: Add your message handler code here and/or call default delete m_rm; CDialog::OnClose(); } void CMfcdibdemoDlg::OnExit() { // TODO: Add your command handler code here PostMessage(WM_SYSCOMMAND,SC_CLOSE); } void CMfcdibdemoDlg::OnHelp() { // TODO: Add your command handler code here CAboutDlg dlgAbout; dlgAbout.DoModal(); }
注意OnMeasureItem和OnDrawItem里面不能调用CDialog::OnMeasureItem和CDialog::OnDrawItem,因为MFC会试图获取MFC的菜单对象但是获取不到,会非法操作。
7、完成,编译程序。
说明:用MFC的话其实不应该用RingSDK界面库,因为都是对窗口,控件做了封装,想要把仿QQ界面程序移植到MFC,应该自己创建MFC窗口和控件,贴图代码可以照搬。
相关文章推荐
- 解决Windows 程序界面闪烁问题的一些经验 & 不用双缓冲实现无闪烁图象
- 使用java swing实现qq登录界面示例分享
- vc循序渐进实现仿QQ界面(二):贴图按钮的三态模拟
- 循序渐进实现仿QQ界面(五):半透明窗体与不透明控件
- 哲学家就餐问题——MFC演示程序
- 关于Visual 2005中MFC调用Berkeley DB的编译错误问题
- Xilinx SDK编译的源码内存使用问题 大型数组,动态分配内存程序跑飞现象原因与解决
- C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- 循序渐进实现仿QQ界面(二):贴图按钮的三态模拟
- 循序渐进实现仿QQ界面(二):贴图按钮的三态模拟
- 以CRichEditView为基类的MFC单文档程序向导建立后编译成功运行失败问题
- VC下MFC程序调用console程序-存储文档的路径问题
- 自定义URL Protocol调用Winfrom程序(exe)并实现传值——类似网页链接调用QQ、旺旺
- qq7.0的视频动态图登录界面实现讲解解决videoview黑屏问题解决图片视频各种手机适配与缩放衔接问题
- Eclipse Juno下编译Android程序问题——"dx.jar was not loaded from the SDK folder"和"Multiple dex files define"
- vc循序渐进实现仿QQ界面(五):半透明窗体与不透明控件
- MFC API实现Excel读写 屏蔽调用SaveAs函数时弹出“文件已存在”问题
- 循序渐进实现仿QQ界面
- 循序渐进实现仿QQ界面(五):半透明窗体与不透明控件
- C#调用MFC程序DLL库——MFC项目DLL生成问题、DLL引用链问题、DLL读取配置文件路径问题