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\

至此最基本的基类和点的结构体已经建设完成了,下一步将介绍画点。

VC++开发GIS系统(33)基本GIS系统中点单元的结构体 IDL读取XML文件

作者:,GIS爱好者。
分享本文,请您带上本文链接
分享到:

发表评论