上节课介绍了CChart在炫彩界面库中的应用,其中炫彩界面库采用的是C++模板。本节课继续介绍炫彩界面库的C语言模板下怎么使用CChart。

在C语言下使用CChart,和C++下差别不是很大。笨笨在XCChart.h里面重新封装了两个宏命令。

消息响应函数定义宏:

XC_CChart_DecEleEventC(hWindowM, chartM, IDS)

第一个参数是HWINDOW变量,也就是炫彩主窗口变量。

第二个参数是一个CChart变量,需要用户提前放置好。

第三个参数是绘图所用元素的ID,用字符串表示,例如L”ID_PICTURE_1”。

消息注册宏:

XC_CChart_RegEleEventC(hWindowM, IDS)

第一个参数是HWINDOW变量,也就是炫彩主窗口变量。

第二个参数是绘图所用元素的ID,用字符串表示,例如L”ID_PICTURE_1”。

和C++下的宏很接近。为简便,宏命令包装的具体内容在本节课的最后给出,这里先介绍使用方法。

1、界面布局xml不用新建,复制上一课的即可。。

2、新建一个VC6的Win32 Application空工程LessonA59,注意是空工程。

3、拷贝炫彩界面库文件xcgui.h、XCGUI.lib、XCGUI.dll到LessonA58文件夹,拷贝CChart库文件Chart.h、Chart.lib、Chart.dll、Chartu.lib、Chartu.dll到LessonA59文件夹。

4、拷贝XCChart.h。

5、新建一个LessonA59.cpp并加入到工程,从炫彩界面库的说明书中,拷贝一个以c语言方式加载界面布局文件的模板,并在抬头加上#include <windows.h>。如果不好找,直接从下面复制拷贝。

//包含炫彩界面库文件
#inlcude <windows.h>
#pragma comment(lib, "XCGUI.lib")
#include "xcgui.h"HWINDOW  hWindow=NULL;//事件响应
int CALLBACK My_EventBtnClick(BOOL *pbHandled)
{//弹出消息框MessageBox(XWnd_GetHWND(hWindow),L"你点击了按钮",L"提示",MB_OK);*pbHandled=TRUE; //对该事件进行拦截,如果不需要拦截可以去掉该行代码return 0;    //事件的返回值
}int APIENTRY wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)
{XInitXCGUI(); //初始化hWindow=XWnd_Create(0,0,300,200,L"炫彩界面库-窗口");//创建窗口if(hWindow){HELE hButton=XBtn_Create(20,60,80,25,L"按钮",hWindow);//创建按钮XEle_RegEventC(hButton,XE_BNCLICK,My_EventBtnClick);//注册按钮点击事件XWnd_AdjustLayout(hWindow);  //调整布局,如果没有使用布局功能,可以不调用此函数XWnd_ShowWindow(hWindow,SW_SHOW);//显示窗口XRunXCGUI(); //运行}XExitXCGUI(); //释放资源return 0;
}

这个文件相当简短。

默认添加的按钮用不上,我们直接删掉。

删除按钮创建代码及其消息响应函数,最后的代码更简短了。

//包含炫彩界面库文件
#inlcude <windows.h>
#pragma comment(lib, "XCGUI.lib")
#include "xcgui.h"HWINDOW  hWindow=NULL;int APIENTRY wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)
{XInitXCGUI(); //初始化hWindow=XWnd_Create(0,0,300,200,L"炫彩界面库-窗口");//创建窗口if(hWindow){XWnd_AdjustLayout(hWindow);  //调整布局,如果没有使用布局功能,可以不调用此函数XWnd_ShowWindow(hWindow,SW_SHOW);//显示窗口XRunXCGUI(); //运行}XExitXCGUI(); //释放资源return 0;
}

仅仅寥寥几行。

6、写入正确的xml布局文件路径。

因为我们要从xml文件中读取界面,首先删除这一行代码:

hWindow=XWnd_Create(0,0,300,200,L"炫彩界面库-窗口");//创建窗口

修改为:

XC_LoadResource(L".\\Simple\\resource.res");
HXCGUI hXCGUI=XC_LoadLayout(L".\\Simple\\main.xml");
hWindow = (HWINDOW)hXCGUI;

7、添加CChart支持

#include "XCChart.h"

8、添加一个CChart变量

CChart chart;

这是一个全局变量,这句话放置在模板文件的HWINDOW hWindow=NULL;之后即可。

9、定义消息响应函数

XC_CChart_DecEleEventC(hWindow, chart, L"ID_PICTURE_1");

这句话放置在上一句话CChart chart;之后即可。

10、注册消息响应函数

XC_CChart_RegEleEventC(hWindow, L"ID_PICTURE_1");

这句话只要在Init()函数里面即可,位置没有特定要求。这里我们把它放置XWnd_ShowWindow(hWindow,SW_SHOW);这一行之后。

11、DirectUI修正

XC_CChart_EleMsgRepair(hWindow, chart, L"ID_PICTURE_1");

到此为止,CChart的支撑代码已经完成,下面添加数据。上一课我们画的饼图,这一课画柱图。

12、添加数据。

在Init()里面添加如下代码。

        chart.SetType(kTypeStem);double data[6] ={1, 3, 5, 2, 4, 6};chart.AddStems(data, 6, _T("序列1"));chart.SetTitle(_T("炫彩界面库画柱图"));

运行结果如图。

这节课结束。

在最后,给出本节课宏命令封装的内容,以便大家在没有本节课源码的情况下自行处理。

消息注册命令

#define XC_CChart_RegEleEventC(hWindowM, IDS) {\HELE hMyPanel = (HELE)XC_GetObjectByIDName(hWindowM, IDS);\XEle_RegEventC(hMyPanel, XE_PAINT, OnEleDraw);\XEle_RegEventC(hMyPanel, XE_LBUTTONDOWN, OnEleLButtonDown);\XEle_RegEventC(hMyPanel, XE_LBUTTONUP, OnEleLButtonUp);\XEle_RegEventC(hMyPanel, XE_LBUTTONDBCLICK, OnEleLButtonDblClk);\XEle_RegEventC(hMyPanel, XE_RBUTTONDOWN, OnEleRButtonDown);\XEle_RegEventC(hMyPanel, XE_MOUSEMOVE, OnEleMouseMove);\XEle_RegEventC(hMyPanel, XE_MOUSEWHEEL, OnEleMouseWheel);\XEle_RegEventC(hMyPanel, XE_KEYDOWN, OnEleKeyDown);\XEle_EnableEvent_XE_MOUSEWHEEL(hMyPanel, TRUE);\}\

消息响应函数定义命令

#define XC_CChart_DecEleEventC(hWindowM, chartM, IDS)\int CALLBACK OnEleDraw(HDRAW hDraw, BOOL *pbHandled)\{\RECT rect;\HELE hMyPanel = (HELE)XC_GetObjectByIDName(hWindowM, IDS);\XEle_GetClientRect(hMyPanel, &rect);\HDC hDC = XDraw_GetHDC(hDraw);\XEle_DrawEle(hMyPanel, hDraw);\if(XC_IsEnableD2D())\{\chartM.OnDraw(hDC, rect);\}\else\{\chartM.OnDraw(hDC, rect);\}\\*pbHandled=TRUE;\return 0;\}\int CALLBACK OnEleLButtonDown(UINT nFlags, POINT *pPt, BOOL *pbHandled)\{\HWND hWnd = XWnd_GetHWND(hWindowM);\if(chartM.OnLButtonDown(hWnd, *pPt, 0))\{\XWnd_Redraw(hWindowM);\}\*pbHandled = FALSE;\return 0;\}\int CALLBACK OnEleLButtonUp(UINT flags, POINT *pPt, BOOL *pbHandled)\{\HWND hWnd = XWnd_GetHWND(hWindowM);\if(chartM.OnLButtonUp(hWnd, *pPt, 0))\{\XWnd_Redraw(hWindowM);\}\*pbHandled = FALSE;\return 0;\}\int CALLBACK OnEleLButtonDblClk(UINT nFlags, POINT *pPt, BOOL *pbHandled)\{\HWND hWnd = XWnd_GetHWND(hWindowM);\if(chartM.OnLButtonDblClk(hWnd, *pPt, 0))\{\XWnd_Redraw(hWindowM);\}\*pbHandled = FALSE;\return 0;\}\int CALLBACK OnEleRButtonDown(UINT nFlags, POINT *pPt, BOOL *pbHandled)\{\HELE hMyPanel = (HELE)XC_GetObjectByIDName(hWindowM, IDS);\XEle_PointClientToWndClient(hMyPanel, pPt);\\HWND hWnd = XWnd_GetHWND(hWindowM);\ClientToScreen(hWnd, pPt);\if(chartM.OnContextMenu(NULL, hWnd, *pPt))\{\XWnd_Redraw(hWindowM);\}\*pbHandled = FALSE;\return 0;\}\int CALLBACK OnEleMouseMove(UINT nFlags, POINT *pPt, BOOL *pbHandled)\{\HWND hWnd = XWnd_GetHWND(hWindowM);\if(chartM.OnMouseMove(hWnd, *pPt, 0))\{\XWnd_Redraw(hWindowM);\}\*pbHandled = FALSE;\return 0;\}\int CALLBACK OnEleMouseWheel(UINT nFlags,POINT *pPt,BOOL *pbHandled)\{\HWND hWnd = XWnd_GetHWND(hWindowM);\if(chartM.OnMouseWheel(hWnd, *pPt, 0))\{\XWnd_Redraw(hWindowM);\}\*pbHandled = FALSE;\return 0;\}\int CALLBACK OnEleKeyDown(WPARAM wParam, LPARAM lParam, BOOL *pbHandled)\{\HWND hWnd = XWnd_GetHWND(hWindowM);\UINT    key = (UINT)wParam;\if(chartM.OnKeyDown(hWnd, key))\{\XWnd_Redraw(hWindowM);\}\*pbHandled = FALSE;\return 0;\}\

深入浅出CChart 每日一课——快乐高四第五十九课 殊途同归,炫彩界面库之C代码风格相关推荐

  1. 深入浅出CChart 每日一课——快乐高四第五十六课 絮絮叨叨,岁月杀猪刀之FAQ

    CChart发布已有多年,QQ交流群也成立了很久.在和网友的交流中,发行了CChart的很多问题,也进行了很多改进和完善. 网友们接触CChart的时间有早有晚,不同的网友经常在群里或私聊的时候提出的 ...

  2. 深入浅出CChart 每日一课——快乐高四第五十二课 旧梦重温,天上人间之炫彩界面库

    早在第十七课,就已经介绍了CChart在炫彩界面库中的使用方法.不过呢,那里的方法有一点小问题,就是我们有点霸道,占用了整个客户区.一般情况下,这样是不太合适的,因此,笨笨一直有重写一个炫彩教程的想法 ...

  3. 深入浅出CChart 每日一课——快乐高四第五十八课 大道至简,炫彩界面库之接口代码优化

    上节课对CChart在新版炫彩界面库中的使用进行了详细说明,大家看到CChart对炫彩界面库具有完美的兼容性. 但是呢,大家也发现了,要实现CChart的完整功能,需要用户编写的代码不少,杂七杂八地接 ...

  4. 深入浅出CChart 每日一课——快乐高四第五十课 新石器时代,轻装上阵之EasyX窗口绘图

    这一课继续介绍了在控制台程序中绘图,不过控制台窗口稍有变化,是EasyX库生成的控制台窗口. 根据EasyX官方主页的说明,EasyX 是针对 C++ 的图形库,可以帮助C/C++初学者快速上手图形和 ...

  5. 深入浅出CChart 每日一课——快乐高四第五十七课 新的起点,炫彩界面库之老树新芽

    CChart对多种DirectUI库具有良好的适配性,炫彩界面库也不例外.前面已经有两篇关于炫彩界面库的课程,分别是第17课"深入浅出CChart 每日一课--第十七课 时尚加潮流,Dire ...

  6. 深入浅出CChart 每日一课——快乐高四第三十课 麦正帮主,ActiveX控件巨鲸帮巨鲸岛之易语言篇

    现在呢,笨笨来揭晓上节课留下的悬念.其实笨笨想再介绍一下CChart在著名的国产语言易语言里面的应用. 下一段介绍来自百度百科. 易语言是一门以中文作为程序代码编程语言,其以"易" ...

  7. 深入浅出CChart 每日一课——快乐高四第五十一课 蹒跚学步,轻松自在之Win32++

    WIN32++是封装了Win32API的C++项目.项目地址:http://sourceforge.net/projects/win32-framework/files/?source=navbar. ...

  8. 深入浅出CChart 每日一课——快乐高四第五课 梦想的天空,锦上添花之客户区自绘篇

    上节课笨笨给大家介绍了CChart的插件菜单功能,这属于定制功能,给了用户发挥的自由.本节课继续介绍CChart的定制功能,这节课的内容要实用得多,因为定制的是客户区.客户区自绘功能将给您插上理想的翅 ...

  9. 深入浅出CChart 每日一课——快乐高四第四十一课 投石问路,SoUI探险第一关之弹出窗口

    SoUI是什么?SoUI是启程软件(也就是黄大师个人)开发的一个C++ DirectUI库. DirectUI也是当前桌面开发的趋势和潮流,已经出现了很多商业或者开源的DirectUI库.以前的课程, ...

  10. 深入浅出CChart 每日一课——快乐高四第四十九课 旧石器时代,老血狂喷之控制台窗口绘图

    前面快乐高四第三十三课,介绍了在控制台程序中怎么利用CChart绘制曲线,那里的方法呢,很简单,就是创建一个弹出窗口,然后在这个弹出窗口上绘图,其实技术含量比较低. 这一课呢,笨笨想给大家介绍一下怎么 ...

最新文章

  1. Zookeeper 的学习与运用
  2. TCP及socket通信原理详解
  3. 【好程序员笔记分享】——UIView与CALayer详解
  4. 计算机科学计算方面分为,计算机方面的专业分为哪些类?【资讯与计算科学】和【电脑科学与技术专业】有什么不同?...
  5. 嵌入式成长轨迹25 【Linux应用编程强化】【Linux下的C编程 下】【实例:客户端/服务器端程序】...
  6. 1.4编程基础之逻辑表达式与条件分支 12 骑车与走路
  7. createbitmap 旋转90度_Android Bitmap图片两种方案旋转90度的方法代码
  8. mysql数据库表子查询语句_MySQL使用子查询教程
  9. windows下git安装
  10. nodejs下载 安装 配置环境
  11. 【设计鉴赏】张艺谋《影》震撼人心的海报设计
  12. 【机器人学】当前工业机器人应用中的机械结构设计方法分析
  13. stmt php,PHP mysqli_stmt_free_result() 函数用法及示例
  14. 洛谷----P1036 [NOIP2002 普及组] 选数
  15. 均值定理最大值最小值公式_数学均值定理怎么求不等式的最大值最小值,求教会(ฅω*ฅ)...
  16. python求次幂_python如何求次幂?
  17. HEVC 参考帧管理(RPS)
  18. LeetCode:145. Binary Tree Postorder Traversal
  19. 转载:SFC /SCANNOW发现损坏文件应对方法参考
  20. 使用测试客户端「玩转」MQTT 5.0

热门文章

  1. server giving msxml3.dll error '80072f7d' when trying to access secure url
  2. Java Poi 根据文字内容 插入 word 图片
  3. Linux 0.11-shell 程序读取你的命令-43
  4. 对于Linux内核tty设备的一点理解 【转】
  5. Vbox虚拟机无法启动错误Mark
  6. 来杭州云栖大会,全面了解企业如何实现云上IT治理
  7. CRC校验(循环冗余校验)小知识
  8. 怎么用计算机计算方位角,坐标方位角连续计算 fx-5800计算器编程
  9. 智能时尚:人工智能在时尚服装行业的应用综述 | 580+参考文献
  10. 使用halcon实现3维点云物体与模型的匹配并显示差异