VC++开发GIS系统(34)解决鼠标左键的冲突
还记得之前关于鼠标的问题不?为此我写过2篇文章来解释这个问题以及解决的必要性:VC++开发GIS系统(29)关于鼠标左键的联想1,还有解决的方法:VC++开发GIS系统(30)关于鼠标左键的联想2(C++中的类和对象),开发进行到现在就要正式用到这个方法了,有没有很激动?
新建一个DLL项目
紧接上面的工作,下面要将文章VC++开发GIS系统(30)关于鼠标左键的联想2(C++中的类和对象)中的方法用到项目中来,首先要新建一个DLL项目,方法在文章VC++开发GIS系统(1)使用DLL导出类编程示例中介绍过,讲务必按照教程中的方法来。
项目命名为:malaBase,如图:
添加导出dll的.h和.cpp文件
.h文件
#ifndef _MALABASE_H_
#define _MALABASE_H_
#ifndef _MALABASE_EXPORT
#define malabasedll __declspec(dllimport)
#else
#define malabasedll __declspec(dllexport)
#endif
#include "malaStruct.h"
#include <vector>
using namespace std;
class malabasedll CmalaMouseAction
{
public:
CmalaMouseAction();
virtual ~CmalaMouseAction();
virtual void LButtonDown (UINT nFlags, malaPoint point);
virtual void LButtonUp(UINT nFlags, malaPoint point);
virtual void RButtonDown(UINT nFlags, malaPoint point);
virtual void RButtonUp(UINT nFlags, malaPoint point);
virtual void MouseMove(UINT nFlags, malaPoint point);
virtual void MouseWheel(UINT nFlags, short zDelta, malaPoint pt);
CView* m_ptView;
};
#ifndef _MALABASE_EXPORT
#ifdef _DEBUG
#pragma comment(lib,"malaBase.lib")
#else
#pragma comment(lib,"malaBase.lib")
#endif
#endif
#endif
.cpp文件
#include "StdAfx.h"
#include "_malaBase.h"
#include <math.h>
CmalaMouseAction::CmalaMouseAction()
{
m_ptView = NULL;
}
CmalaMouseAction::~CmalaMouseAction(){}
void CmalaMouseAction::LButtonDown(UINT nFlags, malaPoint point){}
void CmalaMouseAction::LButtonUp(UINT nFlags, malaPoint point){}
void CmalaMouseAction::RButtonDown(UINT nFlags, malaPoint point){}
void CmalaMouseAction::RButtonUp(UINT nFlags, malaPoint point){}
void CmalaMouseAction::MouseMove(UINT nFlags, malaPoint point){}
void CmalaMouseAction::MouseWheel(UINT nFlags, short zDelta, malaPoint pt){}
这里面的代码其实就是新建了一个叫CmalaMouseAction的类,但这和普通的C++类还有一点不同。首先是头文件中的
#ifndef _MALABASE_EXPORT
#define malabasedll __declspec(dllimport)
#else
#define malabasedll __declspec(dllexport)
#endif
这段代码用于导出这个dll,看不懂?看这里:VC++开发GIS系统(3)关于#ifndef#define#endif的说明
同样还有.h文件中的代码:
#ifndef _MALABASE_EXPORT
#ifdef _DEBUG
#pragma comment(lib,"malaBase.lib")
#else
#pragma comment(lib,"malaBase.lib")
#endif
#endif
表示在工程中链接malaBase.lib这个库。 和在工程设置里写上链入malaBase.lib的效果一样,不过这种方法写的 程序别人在使用你的代码的时候就不用再设置工程settings了。
同样还有在类名前有一个malabasedll,这和上述
#ifndef _MALABASE_EXPORT
#define malabasedll __declspec(dllimport)
#else
#define malabasedll __declspec(dllexport)
#endif
中的malabasedll保持一致,表示这个类用于导出。
设置DLL项目
这里的设置和之前VC++开发GIS系统(32)新建malagis的MFC工程中的设置类似,也有一点不同,在之后的程序开发中所有的dll设置均和本文一致,所以在此具体介绍一下:
设置1 常规--输出目录
设置为VC++开发GIS系统(32)新建malagis的MFC工程中所讲到的bin目录。
设置2 C/C++常规--附加包含目录
设置为VC++开发GIS系统(32)新建malagis的MFC工程中所讲到的include目录。
设置3 C/C++常规--预处理器
这里要设置和头文件中
#ifndef _MALABASE_EXPORT
相一致的值。
设置4 链接器--常规
将附加库目录设置为VC++开发GIS系统(32)新建malagis的MFC工程中所讲到的bin目录。
设置5 生成事件--后期生成事件
将.h文件copy到VC++开发GIS系统(32)新建malagis的MFC工程中所讲到的include目录。命令为:
copy _malaBase.h F:\malagis-git\malagis_out\include\
至此最基本的基类和点的结构体已经建设完成了,下一步将介绍画点。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。