VC++软件创业合作方法介绍

VC++软件创业合作方法介绍

 

 

版本履历

1.0

2013年4月10日

沈阳松风科技有限公司:刘宁

初版

1.1

2013年10月4日

刘宁

修订版

 

 

 

 

 

 

 

 

 

 

 

1.           合作方法... 1

2.           例子与开发库使用介绍... 2

2.1.       准备... 2

2.2.       步骤... 2

2.2.1.    项目需要设置为UNICODE模式... 2

2.2.2.    程序要求管理员权限... 2

2.2.3.    开发库目录配置... 3

2.2.4.    stdafx.h的修改... 4

2.2.5.    CXXXXApp.h的修改... 4

2.2.7.    CDlgAbout类相关程序复制... 6

2.2.8.    主对话框的修改... 6

2.2.9.    语言文件创建... 7

2.2.10.    未注册使用限制... 7

2.2.11.    CCfgFileMgr类相关程序复制... 8

2.2.12.    主要功能编写... 8

2.2.13.    测试... 8

2.2.14.    帮助文件制作... 8

2.2.15.    安装程序制作... 8

2.2.16.    开始销售... 8

2.3.       类说明... 8

2.4.       开发库类说明... 9

3.           开发库介绍... 9

3.1.       ComOpt基本类库介绍... 10

3.2.       ComOptReg基本类库介绍... 10

3.3.       ComOptUI基本类库介绍... 10

 

 

1.      合作方法

 

QQ:1284930064

网站:http://www.1231jp.com

BLOG:http://q1q2q3q4q5q6ln.blog.163.com/

资料站:http://www.1231bg.com

合作前请仔细阅读条款。

 

1)       使用我方提供的VC2008开发的基础程序库,开发个人PC用,或企业PC用应用程序。

2)       代码由你保存(保密)。经测试可用后。然后由我方销售。取得利润5/5分成。

3)       建议3个月业余时间能够开发完成的程序最好,不建议写开发时间太长的程序。

4)       创业有风险,不要想一夜暴富,除非你我运气足够好。要做好3年卖不出去的准备。

5)       具体开发什么程序可自己定,也可我方提出任务。

6)       希望有技术,有闲暇,又想创业的人士加入我们

7)       经仔细考虑愿意合作者,小窗!

 

2.      例子与开发库使用介绍

 

2.1.    准备

请先下载VS2008开发环境

然后下载VS2008SP1(补丁)环境

最后从网站(http://www.1231pd.com/tmp002_about.html)上下载代码例子。

 

2.2.    步骤

开发本基础类库程序请参考下面说明。

需要把例子项目中的必要部分都复制到新的项目。

带有// BASE LIB -----------------------------------------注释的内容都是需要复制和参考的。

如果有疑问双方有疑问,可以随时沟通。

 

2.2.1.  项目需要设置为UNICODE模式

UNICODE,在共享DLL中使用MFC。

 

2.2.2.  程序要求管理员权限

链接器清单文件中选择UAC执行级别‘需要管理员’。

 

 

2.2.3.  开发库目录配置

 

请在选项中分别设置包含文件的目录

XXXX\VCSample\ComOptLib\Inc\ComOpt

XXXX\VCSample\ComOptLib\Inc\ComOptAd

XXXX\VCSample\ComOptLib\Inc\ComOptReg

XXXX\VCSample\ComOptLib\Inc\ComOptUi

请在选项中分别设置库文件的目录

XXXX\VCSample\ComOptLib\Lib

 

2.2.4.  stdafx.h的修改

// BASE LIB -----------------------------------------S

#include "logBase.h"

#include "CommonFunc.h"

#include "CfgFileMgr.h"

#include "MutilLang.h"

 

 

#define APP_RELEASE_DATE    _T("20131004")                           // 最后一版编译时间

#define APP_NAME            _T("Encrypt Note    Book")             // 英文软件名

#define APP_VERSION              _T("1.0.0")                              // 更新的时候必须修改

#define APP_NUM_VERSION     1000000

#define APP_NUM_VERSION_NO  1

#define APP_BUILD           501

#define APP_README_URL   _T("http://www.1231jp.com/colorfull/about/readme/00005_EncryptNoteBook.html"// 说明HTML

#define APP_BUY_URL      _T("http://www.1231jp.com/tmp002_purchase.html")                                         // 通用购买连接

#define APP_HELP_URL     _T("http://www.1231jp.com/colorfull/about/help/00005_EncryptNoteBook.html")    // 帮助HTML

#define APP_UPDATE_URL   _T("http://www.1231jp.com/tmp002_download.html")                                         // 通用下载连接

#define APP_LIC_URL   _T("http://www.1231jp.com/colorfull/about/lic.html")                                        // 通用授权协议

#define APP_ABOUT_URL   _T("http://www.1231jp.com/colorfull/about/00005_EncryptNoteBook.html")         // About    html

 

#define APP_BINARY_FLAG _T("沈阳松风科技有限公司开发UNICODE    20120229")

 

#define PERSON_RECORD_FILE_NAME _T("person_record.dat")

#define CUR_ONLY_USER _T("admin")

 

// 表示执行注册动作

#define MACRO_REG_CODE

// BASE LIB    -----------------------------------------E

 

 

 

 

 

 

 

 

 

 

 


以上内容需要复制到新程序中。

其中

#define APP_RELEASE_DATE    _T("20131004")                           // 最后一版编译时间

必须设置为程序开始销售的时间

#define APP_NAME            _T("Encrypt Note Book")            // 英文软件名

必须设置为标准的程序英文名

 

#define APP_README_URL   _T("http://www.1231jp.com/colorfull/about/readme/00005_EncryptNoteBook.html"// 说明HTML

#define APP_BUY_URL      _T("http://www.1231jp.com/tmp002_purchase.html")                                         // 通用购买连接

#define APP_HELP_URL     _T("http://www.1231jp.com/colorfull/about/help/00005_EncryptNoteBook.html")    // 帮助HTML

#define APP_UPDATE_URL   _T("http://www.1231jp.com/tmp002_download.html")                                         // 通用下载连接

#define APP_LIC_URL   _T("http://www.1231jp.com/colorfull/about/lic.html")                                        // 通用授权协议

#define APP_ABOUT_URL   _T("http://www.1231jp.com/colorfull/about/00005_EncryptNoteBook.html")         // Abouthtml

以上连接中,APP_BUY_URL,APP_LIC_URL,APP_UPDATE_URL是通用的不需要修改

APP_HELP_URL和APP_ABOUT_URL和APP_README_URL需要修改为与程序对应的URL名

 

注意:该HTML由我方编写,会显示在应用程序的相应窗口上。

 

 

2.2.5.  CXXXXApp.h的修改

以下内容需要复制到新程序中,内容酌情修改,详细可参考例子程序。

// BASE LIB    -----------------------------------------S

#include "DlgComRegister.h"

// BASE LIB    -----------------------------------------E

 

public:

     // BASE LIB -----------------------------------------S

     int AfxMessageBoxEx(char    *func, int iLineNo, CString str, int iFlag = -999);

     void ShowRegDlg();

     void ShowRegDlgOnlySetParam(CDlgComRegister    &dlgReg);

     void CheckTimer(UINT_PTR nIDEvent, BOOL    bShowMessage = TRUE);

     void TestCom();

     static UINT InitProcess(void    *p);

     int ExitInstance();

private:

     BOOL    m_bShowRegDlg;

     // BASE LIB -----------------------------------------E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


AfxMessageBoxEx消息显示

ShowRegDlg显示注册对话框

ShowRegDlgOnlySetParam设置注册计算必要参数

CheckTimer定时检查主处理

TestCom测试函数

InitProcess启动进度处理

ExitInstance程序结束的时候,销毁内存

 

2.2.6.  CXXXXApp.cpp的修改

 

 

 

BOOL CEncryptNoteBookApp::InitInstance()

{

     // BASE LIB -----------------------------------------S

     if (!AfxSocketInit())

     {

         AfxMessageBox(_T("Socket Init Error"));

         return FALSE;

     }

     AfxOleInit();

 

#ifndef _DEBUG

     if(CCommonFunc::S_IsChanged() == FALSE)

     {

         return FALSE;

     }

#endif

 

     // LOG初期化

     // APLLOGINIT(strFullPath, strExtName, strLogCfgName)

     CString    strPathT;

     CCommonFunc::S_GetExeCurrentPath(strPathT);

     APLLOGINIT(strPathT    + _T("\\"), _T("log_EncryptNoteBook.log"), _T("log_EncryptNoteBook.cfg"));

 

     // 编译时间LOG

     USES_CONVERSION;

     APLLOG(_T("App compile date=%s time=%s vesion=%s    name=%s"), A2W(__DATE__), A2W(__TIME__), APP_VERSION,    APP_NAME);

     if(CMutilLang::GetInstance()->Init(_T("\\EncryptNoteBook")) == FALSE)

     {

         ERRLOG(_T("language file open failed"));

         return FALSE;

     }

     APLLOG(_T("Read Cfg File start"));

 

     if(CCommonFunc::IsInsideVMWare() == true || CCommonFunc::IsInsideVPC() == true) {

         // 禁止VPC,还需要配合CRC32

         return FALSE;

     }

 

     APLLOG(_T("IsInsideVMWare end"));

 

     CCfgFileMgr::GetInstance()->Load();

#ifdef _DEBUG

     CString    strP = CCfgFileMgr::GetInstance()->GetLoginPassword();

     if(strP.IsEmpty())    {

         strP    = _T("admin123");

         CComEncryptionBase    c;

         strP    = c.GetUnicodeMD5(strP);

         CCfgFileMgr::GetInstance()->SetLoginPassword(strP);

         CCfgFileMgr::GetInstance()->Save();

     }

 

     if(CCfgFileMgr::GetInstance()->GetContentMap()->GetCount()    <= 0) {

         AfxMessageBoxEx(__FUNCTION__,    __LINE__, _T("Configuration file is corrupted, please contact the    developer"));

         return    FALSE;

     }

#endif

 

     if(CCommonFunc::IsAdmin() == FALSE) {

         AfxMessageBoxEx(__FUNCTION__,    __LINE__, _T("Using this tool, you must be    a member of the Administrators group"));

         return FALSE;

     }

#if 1

     // 注册画面检查

     CString    strSaveCode = CCfgFileMgr::GetInstance()->AGetRegisterCode();

     APLLOG(_T("Read Reg"));

     if(strSaveCode.IsEmpty()) {

         ShowRegDlg();

     } else {

         // reg OK

         CString    strFUID;

         strFUID    = CCfgFileMgr::GetInstance()->GetUserFirstExecUID();

         if(strFUID.IsEmpty()) {

              CCfgCodeGenManager    g;

              strFUID    = g.GetNewUID();

              CCfgFileMgr::GetInstance()->SetUserFirstExecUID(strFUID);

         }

 

#ifdef _DEBUG

         //    不需要多语言化,关键字

         CString    strVerApp = _T("Ver1.0.4");

         CCfgFileMgr::GetInstance()->ASetAppVersion(strVerApp);

#endif

 

     }

#endif

     APLLOG(_T("CDlgProcess"));

 

     // 显示应用程序封面

     CDlgProcess    dlgProcess;

     CString    strStartPath;

     CCommonFunc::S_GetExeCurrentPath(strStartPath);

     if(CCommonFunc::S_IsFile(strStartPath + _T("\\start.jpg")) == FALSE) {

         AfxMessageBoxEx(__FUNCTION__,    __LINE__, _T("start.jpg open failed!"));

         return FALSE;

     }

     int iSize = 30;

     if(CMutilLang::GetInstance()->GetDefaultLang().Compare(_T("English")) == 0) {

         iSize =    30;

     }

 

     CString    strStartText;

     strStartText.Format(_T("Version : %s Build %d Copyright 2012-2099"),    APP_VERSION, APP_BUILD);

 

     dlgProcess.SetInStartText(APP_NAME,

         strStartText,   

         _T("瀋陽熠彩科技有限会社"), _T("www.1231jp.com (china:www.1231pd.com)"),    iSize);

     dlgProcess.SetInStartImagePath(strStartPath    + _T("\\start.jpg"));

 

     CDlgProcess::PARAM_ST    param;

     param.pProcessDlgWnd    = &dlgProcess;

     param.pUserParam    = this;

     param.hApp    = NULL;

     param.hDll    = NULL;

     param.bRet    = TRUE;

 

     dlgProcess.SetFunction(&CEncryptNoteBookApp::InitProcess,    &param);

     dlgProcess.DoModal();

 

 

 

     APLLOG(_T("dlgProcess end"));

 

 

     AfxInitRichEdit2();

     AfxInitRichEdit();

 

     CCfgFileMgr::GetInstance()->Load();

     // BASE LIB -----------------------------------------E

 

 

 

 

 

 

 

 

 

 

 

 

 


App中的修改除了前面提到,主要都在InitInstance中

主要包含:

1)       Log初期化(需要修改Log文件名)

     APLLOGINIT(strPathT+ _T("\\"), _T("log_EncryptNoteBook.log"), _T("log_EncryptNoteBook.cfg"));

2)       多语言初期化(目录需要修改)

     if(CMutilLang::GetInstance()->Init(_T("\\EncryptNoteBook")) == FALSE)

3)       关键配置文件加载

     CCfgFileMgr::GetInstance()->Load();

4)       注册画面显示处理逻辑

     CStringstrSaveCode = CCfgFileMgr::GetInstance()->AGetRegisterCode();

    ......

5)       程序封面显示

     CDlgProcessdlgProcess;

     ...............

6)       ShowRegDlgOnlySetParam函数中将来可能要修改服务器IP地址

 

 

 

2.2.7.  CDlgAbout类相关程序复制

程序使用通用的About对话框

所以需要CDlgAbout类复制到新程序中,内容酌情修改,详细可参考例子程序。

其中OnBnClickedButtonCredit中请修改程序名,程序英文名,并将开发者名字记录

调用CDlgAbout的地方可参考例子。

CEncryptNoteBookDlg::OnSysCommand

系统BAR上菜单

void CEncryptNoteBookDlg::OnBnClickedButtonAbout()

UI上按钮

void CEncryptNoteBookDlg::OnAboutAbout()

菜单

 

2.2.8.  主对话框的修改

应用程序主对话框必须包含菜单(主要是About,Update,Lic,Help,Register)

必须包含语言选择组合框

必须有About按钮,注册按钮

主对话框参考CEncryptNoteBookDlg的修改。

     // BASE LIB -----------------------------------------S

     afx_msg void OnCbnSelchangeComboLang();

     afx_msg void OnTimer(UINT_PTR nIDEvent);

     afx_msg void OnBnClickedButtonReg();

     afx_msg void OnAboutHelp();

     afx_msg void OnAboutBuy();

     afx_msg void OnAboutUpdate();

     afx_msg void OnAboutLicense();

     afx_msg void OnAboutAbout();

     afx_msg void OnAboutRegister();

     CComboBox    m_ctrlComboLang;

     CMFCRichEditCtrlEx1 m_ctrlEditErrorInfo;

     // BASE LIB -----------------------------------------E

 

 

 

 

 

 

 

 

 

 

 

 

 

 


1)       语言选择处理函数OnCbnSelchangeComboLang

     CMutilLang::GetInstance()->SetDefaultLang(strLang,_T("\\EncryptNoteBook"));

     需要修改这个目录

 

2)       OnTimer注册检查

3)       OnBnClickedButtonReg画面上注册按钮的执行函数

4)       OnAboutHelp帮助菜单处理

5)       OnAboutBuy购买URL

6)       OnAboutUpdate更新URL

7)       OnAboutLicense 授权URL

8)       OnAboutRegister显示注册画面

9)       OnInitDialog

 

     // BASE LIB -----------------------------------------S

     {

         CStringArray    retArray;

         CString    strDefaultSel;

         CMutilLang::GetInstance()->GetDefaultLangArray(retArray,    strDefaultSel);

 

         for(int i = 0; i    < retArray.GetCount(); i++) {

              m_ctrlComboLang.AddString(retArray.GetAt(i));

         }

         m_ctrlComboLang.SelectString(0,    strDefaultSel);

     }

     // BASE LIB -----------------------------------------E

 

 

 

 

 

 

 


语言信息加载

 

l         InitLang();本画面语言文字设置

l         注册按钮是否显示

     CString strSaveCode =CCfgFileMgr::GetInstance()->AGetRegisterCode();

     。。。。。

l         注册相关检查,SetTimer(1002,500000, 0);//500

l          

 

 

2.2.9.  语言文件创建

程序需要支持多语言,搜索CMutilLang,可知道全部调用的地方。

所有需要替换多语言文字的地方需要调用GetSZ

多语言文字支持文件在EncryptNoteBook目录下,

Chinese.txt,English.txt,japanese.txt,defaultlang.txt

其中defaultlang.txt不需要修改

开发程序时候只需要改写Chinese.txt

然后通过GOOGLE翻译改写English.txt

japanese.txt由我方根据Chinese.txt翻译。

 

 

2.2.10.   未注册使用限制

1)       void CEncryptNoteBookDlg::OnBnClickedButtonAdd()

     限制可参考OnBnClickedButtonAdd的处理。

2)       CString strCode =CCfgFileMgr::GetInstance()->AGetRegisterCode();

     取得注册码

3)       dlg1.SetReturnInfo((char *)W2A(strCode.GetBuffer(0)),strCode.GetLength());

     注册码分析

4)       recnum 取得注册码信息的Code,需要你方提供给我方,以生成LicsenceCode。

5)       CString strV =dlg1.GetReturnInfo(strK);

     根据前面取得的注册码信息的Code取得实际数值,一般0代表不限制,其他代表限制数量

6)       由你方觉得在程序的何处填加限制代码,限制代码的功能需要告诉我方,便于测试

7)       关于注册的地方,有10处以上,MACRO_REG_CODE宏参考,开发代码的时候请检索全部MACRO_REG_CODE和例子程序进行对比

8)        

 

 

 

 

2.2.11.   CCfgFileMgr类相关程序复制

本类是基本配置文件,开发库部分使用了该类,

新程序中也可以在这里增加配置项目。

所以必须要复制该类到新程序中。

 

2.2.12.   主要功能编写

由你方自己选题,或我方提出任务。

选定题目后开始主要功能编写。

 

2.2.13.   测试

你方完成全面测试(Debug,Release)后确认无问题后,我方继续测试

我方测试主要包括

测试项目

 

是否能注册成功

 

是否检查了注册日期超过

 

是否检查了非本机注册用户

 

是否正确支持了多语言

 

菜单URL是否都正确

 

是否有注册限制

 

其他功能是否有严重BUG

 

 

 

 

 

 

2.2.14.   帮助文件制作

由我方完成

2.2.15.   安装程序制作

由我方完成

 

2.2.16.   开始销售

由我方在网站上销售。

 

 

2.3.    类说明

类名的前缀,为查找方便而定。

开发库的独立,体现了共通和应用分离的思想,并且实现了程序的组建化。

类名

说明

CEncryptNoteBookDlg

主窗口,主要的记事本的功能都在这里实现

CEncryptNoteBookApp

主应用类,程序入口,出口,全局对象

CDlgSetup

设置窗口

CDlgSelectRecord

记录检索窗口

CDlgLogin

登陆窗口

CDlgAddOrEditRecord

添加/编辑记录信息窗口

CDatRecordListMgr

记录信息的数据管理类

体现了UI和数据处理分离的思想(所谓MVC)

CCfgFileMgr

主配置文件

体现了UI和数据处理分离的思想(所谓MVC)

CAboutDlg

关于窗口

 

2.4.    开发库类说明

类名

说明

CDlgHtmlAdMain

广告主窗口

CComEncryptionBase

加密解密处理

CComOptHeader

通用头文件

CDlgProcess

启动封面,进度窗口

CCommonFunc

通用函数类

CDlgInHtmlAd

内嵌广告窗口

CCfgCodeGenManager

唯一ID生成类

CDlgTempMain

带有广告的应用程序的主窗口类

CCfgfilebase

基本配置文件类

CMFCStdioFileEx

支持UNICODE的文本文件处理类

CAnsiOrOsFunc

通用函数的封装

CDlgBrowserDir

目录查看对话框

CLogbase

日志处理基本类

CMFCPicture

图片显示

CUTF8StdioFileEx

UTF8文件处理

 

 

 

 

3.      开发库介绍

 

开发库是群主多年的积累,大家也可以试验着参考此方法积累自己的开发库。

本开发库的正式名称是:《熠彩MFC扩展库》

 

l        VCSample\ComOptLib\Inc开发库头文件

n        ComOpt基本类库

n        ComOptAd广告库

n        ComOptReg注册信息库

n        ComOptUi界面控件库

l        VCSample\ComOptLib\Lib开发库库文件

l        VCSample\Debug开发库必要DLL文件(DEBUG)

l        VCSample\Release开发库必要DLL文件(Release)

 

 

3.1.    ComOpt基本类库介绍

类名

说明

CMFCPicture

图片处理类

CComEncryptionBase

加密解密处理

CComOptHeader

通用头文件

CDlgProcess

启动封面,进度窗口

CCommonFunc

通用函数类

可通过头文件了解具体功能,基本上看函数名就知道功能了

CCfgCodeGenManager

唯一ID生成类

CCfgfilebase

基本配置文件类

CMFCStdioFileEx

支持UNICODE的文本文件处理类

CAnsiOrOsFunc

通用函数的封装

CDlgBrowserDir

目录查看对话框

CLogbase

日志处理基本类

 

3.2.    ComOptReg基本类库介绍

类名

说明

CMutilLang

多语言处理

CDlgComRegister

通用注册对话框处理类

 

 

 

 

 

3.3.    ComOptUI基本类库介绍

类名

说明

CComOptDlgCommAttrib

属性对话框

CComOptUIOnlineUpdate

自动升级

CMFCComboBoxEx1

组和框

CMFCListBoxEx

列表框

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值