VISUAL C++软件开发中几个常用功能的实现

原创 2004年08月17日 15:06:00


发表: 2004-08-07 15:23:48 人气:33 楼主  分值:0

[原创]VISUAL C++软件开发中几个常用功能的实现

介绍 
在VCHELP论坛中间,常常见到很多软件开发中提到的最多的基本问题,现在进行列举出来,希望对各位有用。  

正文 
在进行软件开发过程中间,有很多小功能的实现,虽然这些东西你可以不用,但是如果应用仂将会是你的程序更具有专业性。 
一、设置程序自动运行。 
    很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software//Microsoft//Windows//CurrentVersion//Run。参考程序可以见下:(查找程序目录的执行文件,存在则进行添加注册表操作) 
         HKEY RegKey; 
         CString sPath; 
         GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH); 
         sPath.ReleaseBuffer(); 
         int nPos; 
    nPos=sPath.ReverseFind(’//’); 
    sPath=sPath.Left(nPos); 
    CString lpszFile=sPath+"//****.exe";//这里加上你要查找的执行文件名称 
    CFileFind fFind; 
    BOOL bSuccess; 
    bSuccess=fFind.FindFile(lpszFile); 
    fFind.Close(); 
    if(bSuccess) 
    { 
        CString fullName; 
        fullName=lpszFile; 
        RegKey=NULL; 
        RegOpenKey(HKEY_LOCAL_MACHINE,"Software//Microsoft//Windows//CurrentVersion//Run",&RegKey); 
        RegSetValueEx(RegKey,"*****",0,REG_SZ,(const unsigned char*)(LPCTSTR)fullName,fullName.GetLength());//这里加上你需要在注册表中注册的内容 
        this->UpdateData(FALSE); 
    } 
    else 
    { 
        theApp.SetMainSkin(); 
        ::AfxMessageBox("没找到执行程序,自动运行失败"); 
        exit(0); 
    } 

二、自动配置数据源 
    很多的程序都要用到数据库结合的操作,这里举例ACCESS,因为ACCESS在中小型VC系统开发中是最常用到的,如果程序的移植,如果对于很初级的用户来说,你还需要他到配置面板中进行数据源配置的话,那就有点说不过去了。 
         #include <odbcinst.h> 
         //配置数据源,数据库在应用程序目录下,这里比如数据库文件名为***.mdb,程序运行时候可以将数据库文件拷贝到程序目录下面。 
    CString sPath; 
    GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH); 
    sPath.ReleaseBuffer(); 
    int nPos; 
    nPos=sPath.ReverseFind(’//’); 
    sPath=sPath.Left(nPos); 
    CString lpszFileName = sPath + "//***.mdb";//这里修改成你的数据库文件名称 
    CFileFind  fFind; 
    if(!fFind.FindFile(lpszFileName)) 
    { 
        ::AfxMessageBox("没有找到数据库"); 
        exit(0); 
    }  
    CString szDesc; 
    szDesc.Format( "DSN=****;Description=****;DESCRIPTION=The DataBase For ***;FIL=MicrosoftAccess;DEFAULTDIR=%s;DBQ=%s;" ,sPath,lpszFileName);//这里***号可以添加成你的描述 

    //添加数据源 
    if(!::SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)",(LPCSTR)szDesc)) 
    { 
        ::AfxMessageBox("32位ODBC数据源配置错误!"); 
        exit(0); 
    } 

三、设置显示模式: 
    很多的程序的移植的运行环境是改变的。有可能你的原来开发环境是1024X768,但是到了那些显示器大于17的时候(分辨率超过你的开发时的分辨率时),程序的显示可能就不好看了。 
         DEVMODE lpDevMode; 
    lpDevMode.dmPelsHeight=768;//Y方向象素点 
    lpDevMode.dmPelsWidth=1024;//X方向象素点 
    lpDevMode.dmDisplayFrequency=85;//屏幕刷新率 
    lpDevMode.dmFields=DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY; 
    ChangeDisplaySettings(&lpDevMode,0); 

四、在你的程序中间加载其他应用程序: 
    你的程序除了调用到各个模块进行协同工作外(DLL),还有可能调用不是同一个开发环境下的应用程序,比如VC环境下调用DELPHI,VB开发的执行程序,你就可以用到下面的方法(将调用的应用程序拷贝程序目录中): 
         CString sPath; 
    GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH); 
    sPath.ReleaseBuffer(); 
    int nPos; 
    nPos=sPath.ReverseFind(’//’); 
    sPath=sPath.Left(nPos); 
    CString lpszFileName = sPath + "//***.exe";//这里修改成你的调用应用程序的文件名称 
    CFileFind  fFind; 
    if(!fFind.FindFile(lpszFileName)) 
    { 
        ::AfxMessageBox("没有找到调用的应用程序!");  
        return FALSE; 
    } 
    else 
        ShellExecute(NULL,NULL,_T("***.exe"),NULL,sPath,NULL);  

五、结束进程: 
    在你的程序中结束别的程序进程,采用的方法是进行进程列举,然后采用查找的方法进行: 
         #include "TLHELP32.H" 
         DWORD ProcessID[50]; 
    CString kkk[50]; 
    HANDLE SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  
    PROCESSENTRY32* info=new PROCESSENTRY32; 
    PROCESSENTRY32 ProcessInfo;//声明进程信息变量 
    ProcessInfo.dwSize=sizeof(ProcessInfo);//设置ProcessInfo的大小 
    //返回系统中第一个进程的信息 
    BOOL Status=Process32First(SnapShot,&ProcessInfo); 
    int m_nProcess=0;  
    while(Status) 
    { 
        CString s,str1,str2; 
        s.Format("%d",ProcessInfo.cntThreads); 
        str1.Format("%s",ProcessInfo.szExeFile); 
        str1=ProcessInfo.szExeFile; 
        kkk[m_nProcess]=ProcessInfo.szExeFile;  
        ProcessID[m_nProcess]=ProcessInfo.th32ProcessID;  
        if(str1=="***.exe")//***.exe就是你要结束的进程的名称 
        { 
            HANDLE ProcessHandle; 
            ProcessHandle=OpenProcess (PROCESS_ALL_ACCESS,FALSE,ProcessID[m_nProcess]); 
            TerminateProcess(ProcessHandle,0);     
        } 
        Status=Process32Next(SnapShot,&ProcessInfo); 
        m_nProcess++; 
    } 
正文完 

软件开发中几个常用功能的实现

在进行软件开发过程中间,有很多小功能的实现,虽然这些东西你可以不用,但是如果应用仂将会是你的程序更具有专业性。 一、设置程序自动运行。     很多监控软件要求软件能够在系统重新启动后不用用户去点...
  • u010258235
  • u010258235
  • 2013年10月21日 09:42
  • 500

用Visual C++开发数据库程序

  ...
  • jianxiong8814
  • jianxiong8814
  • 2007年04月23日 11:51
  • 737

va visual assist 常用的几个功能

1. VA View 用于搜索文件,比如senderInfo.cpp,非常快速。 2.在一个.h文件或者.cpp文件中搜索函数。...
  • zhangbinsijifeng
  • zhangbinsijifeng
  • 2015年07月09日 13:32
  • 674

软件开发的几个阶段

1、编写代码2、编写程序3、程序设计4、软件设计5、系统设计6、架构设计 
  • zhmnsw
  • zhmnsw
  • 2006年10月31日 19:03
  • 1023

用Visual C++开发数据库应用程序(三)

用Visual C++开发数据库应用程序(三)2.24 SQL操作构造和执行SQL语句构造SQL语句可以通过三种方式构造SQL语句:在程序开发阶段确定、在运行时确定或由用户输入SQL语句。在程序开发时...
  • byxdaz
  • byxdaz
  • 2006年03月29日 15:30
  • 2192

C/C++如何在Visual Studio里建立并运行多个含main函数的文件

问题: 一个工程只能有一个main函数,如果每次都从头新建应用程序,比较繁琐,多个main函数的文件怎样在VisualStudio里快速运行起来? 这里是用Visual Studio2015展示。 ...
  • u014485485
  • u014485485
  • 2017年09月28日 19:42
  • 433

如何同时打开Microsoft Visual C++ 6.0 多个实例。

  很多人在双击后缀名为.dsw的文件时候,可以打开Visual C++ 6.0 简称 VC6 并进入工作状态。可是再双击一个.dsw就不行了,在同一个VC6里面打开,一般的解决办法是再开一个VC6,...
  • longhr
  • longhr
  • 2007年12月05日 14:18
  • 1581

软件开发的几个层次

1.能够实现功能的程序员 不管代码质量,只要能实现项目的功能就行 2.软件稳定型 软件不容易崩溃,软件稳定,bug少 3.代码可读性好,扩展性好,容易维护 4.算法 技术最厉害的阶段还是算...
  • a2657222
  • a2657222
  • 2013年03月14日 17:11
  • 686

认识Visual C++各个版本

来源:https://en.wikipedia.org/wiki/Visual_C%2B%2B 有时,需要知道这些基本的VC知识! Strictly 32-bit versions Visua...
  • u011430225
  • u011430225
  • 2016年03月28日 09:54
  • 2533

Visual C++中实现对图像数据的读取显示

作者:jiaohe2000 转自:http://blog.csdn.net/jiaohe2000/article/details/1733517 在利用VC进行数据库编程时,经常需要处理数...
  • whw8007
  • whw8007
  • 2014年01月12日 19:03
  • 793
收藏助手
不良信息举报
您举报文章:VISUAL C++软件开发中几个常用功能的实现
举报原因:
原因补充:

(最多只允许输入30个字)