Visual Studio 2005 学习笔记一 入门

转载自:http://blog.163.com/zm_shichaoren/blog/static/6880234120087211452776/

Visual studio 2005入门记

终于卸掉了Visual C++6.0,换上了全新的Visual C++2005。尽管是简体中文版的,但是功能强大的Visual studio 2005 IDE庞大的开发环境和N多的配置设置,学习起来还不是很简单。C++/CLI通过对ISO C++ 标准的纯粹扩展和新语法,不像传统的MS-DOS 控制台程序,所以对于新手,首先应弄明白怎样在Visual studio 2005开发环境下编译常规控制台应用程序及Windows应用程序。下面是本人的入门手记:

1)      win32控制台应用程序

文件—〉新建—〉项目à Visual C++——〉win32——〉win32控制台应用程序—〉控制台应用程序—〉预编译头—〉完成—〉新建win32.cpp.

<1>//Basic IOProgram

// winconsole.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

#include <iostream>

using std::cin;

using std::cout;

int _tmain(int argc, _TCHAR* argv[])

{

cout<<"Hello World.\n";

getchar();

return 0;

}

Ctrl+F7编译,Ctrl+F5运行。

<2> //托换代码和非托管代码混合编程

// managed.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

#using <mscorlib.dll> // 为了使用Console::WriteLine方法

#include <stdio.h> // 为了使用printf

using namespace System;

// 声明非托管代码

#pragma unmanaged

void print(char *msg)

{

printf("%s\n", msg);

}

// 切换回托换代码

#pragma managed

int _tmain(int argc, _TCHAR* argv[])

{

// 调用托管的方法输出到控制台

Console::WriteLine(L"Hello world from managed method");

// 使用标准输出

print("hello world from unmanaged method");

getchar();

return 0;

}

注意: 项目属性—〉配置属性—〉常规—〉公共语言运行库支持—〉公共语言运行库支持(/clr)

我们观察“配置属性—〉常规——〉多字节字符集/Unicode字符集”,这一选项默认为“Unicode字符集”。在vs2005以前版本的vs默认使用多字节字符集,而vs2005默认使用unicode字符集,这会使一些代码不能编译通过。这里我们要弄清楚从main到_tmain和从char*到_TCHAR*的问题。

从Visual Studio 7开始,Microsoft引入了所谓的一般文本例程映射。TCHAR.H中定义的是映射到多字节字符集 (MBCS)、单字节字符集 (SBCS)和Unicode模型的宏或内联函数。这些映射处理那些表示为单字节ANSI ASCII或者双字节Unicode编码的字符数据。

如果正在遵从Unicode算法,则要确定把所有的main()函数改为_tmain(),并把字符指针从char*改为_TCHAR*。关于Windows编码问题将会经常遇到,大家可以网上查阅相关资料。

2)      CLR控制台应用程序

文件—〉新建—〉项目à Visual C++——〉CLR—〉CLR控制台应用程序—〉打开左侧“解决方案资源管理器”中的源文件—〉右击—〉添加新项—〉建立.cpp。

注意: 项目属性—〉配置属性—〉常规—〉公共语言运行库支持—〉公共语言运行库支持(/clr)

// clrconsole.cpp: 主项目文件。

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)

{

Console::WriteLine(L"Hello World from CLR console application.");

return 0;

}

3)      MFC编写windows控制台应用程序

文件—〉新建—〉项目à Visual C++——〉win32——〉win32控制台应用程序—〉控制台应用程序—〉空项目

#include <afx.h>          //必需

#include <afxwin.h>       // 必需

#include <iostream>

using std::cout;

using std::endl;

CWinApp theApp;  //创建应用程序实例

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) //入口函数

{

int nRetCode = 0;

if (!AfxWinInit(::GetModuleHandle(NULL),

NULL,

::GetCommandLine(),

0)  //由于没有调用MFC提供的WinMain函数,所以在此AfxWinInit进行初始化

)

{

nRetCode = 1;

}

else

{

CString strHello("Hello World from MFC winconsole platform"); //MFC类CString定义一个字符串对象

AfxMessageBox(strHello);

char *strHelloT = "Hello World from win32 console platform";

cout << strHelloT << endl;

}

getchar();

return nRetCode;

}

fatal error C1189: #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

解决方法:项目属性—〉配置属性—〉常规—〉MFC的使用—〉在共享DLL中使用MFC

或在静态中使用MFC。

4)利用vc++2005 进行传统SDK编程;

文件—〉新建—〉项目à Visual C++——〉win32——〉win32应用程序—〉空项目—〉完成—〉新建win32.cpp.

#include<windows.h>

//消息处理函数,Windows系统规定每个消息处理函数的定义形式都相同

LRESULT CALLBACK WndProc(

HWND     hWnd,          //窗口句柄

UINT     nMessage,      //所发出的消息

WPARAM   wParam,        //参数1

LPARAM   lParam         //参数2

)

{

switch(nMessage)

{

//响应WM_LBUTTONDOWN消息

case WM_LBUTTONDOWN:

MessageBox(hWnd,L"收到WM_LBUTTONDOWN消息!",L"通知",MB_OK);

break;

//响应WM_RBUTTONDOWN消息

case WM_RBUTTONDOWN:

MessageBox(hWnd,L"收到WM_RBUTTONDOWN消息!",L"通知",MB_OK);

break;

//响应WM_CREATE消息

case WM_CREATE:

MessageBox(hWnd,L"收到WM_CREATE消息!",L"通知",MB_OK);

break;

//响应WM_DESTROY消息

case WM_DESTROY:

MessageBox(hWnd,L"收到WM_DESTROY消息!",L"通知",MB_OK);

PostQuitMessage(0);

break;

//必须调用函数DefWindowProc(),这是Windows系统多规定的

default:

return DefWindowProc(hWnd,nMessage,wParam,lParam);

}

return FALSE;

}

//应用程序入口函数(此程序第一个被执行)

int WINAPI WinMain(

HINSTANCE hInstance, //程序实例句柄

HINSTANCE hPrevInstance,//为保持与Win16兼容的句柄

LPSTR     lpCmdLine,// 命令行参数

int       nCmdShow //初始化窗口显示方式

)

{

WNDCLASS oWnd;                //窗口类,可为WNDCLASS

MSG      msgTmp;              //Windows 消息

HWND     hWnd;                //窗口句柄

oWnd.style=CS_HREDRAW|CS_VREDRAW;          //窗口类型

oWnd.lpfnWndProc=(WNDPROC)WndProc;         //窗口处理函数为WndProc()

oWnd.cbClsExtra=NULL;                      //窗口类无扩展

oWnd.cbWndExtra=NULL;                      //窗口实例无扩展

oWnd.hInstance=hInstance;                  //当前实例句柄

oWnd.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口最小化图标,为默认图标

oWnd.hCursor=LoadCursor(NULL,IDC_ARROW);   //用箭头作为鼠标图标

oWnd.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//以白色作为窗口颜色

oWnd.lpszMenuName=NULL;                    //窗口无菜单

oWnd.lpszClassName=L"第一个Windows程序";    //窗口所属类名

//注册窗口类

if(!RegisterClass(&oWnd))

{

MessageBeep(0);                        //如注册失败则发出警告

return FALSE;

}

//创建窗口

hWnd=CreateWindow(

L"第一个Windows程序",  //注册的窗口类名

L"第一个vWindows程序", //窗口标题名

WS_OVERLAPPEDWINDOW,  //窗口的风格

CW_USEDEFAULT,        //显示窗口的左上角的X坐标,取默认值

CW_USEDEFAULT,        //显示窗口的左上角的Y坐标,取默认值

CW_USEDEFAULT,        //显示窗口的右下角的X坐标,取默认值

CW_USEDEFAULT,        //显示窗口的右下角的Y坐标,取默认值

NULL,                 //此窗口无父窗口

NULL,                 //菜单句柄(此处设为没有菜单句柄)

hInstance,           //程序实力句柄

NULL                  //指向一个传递给窗口的指针型参数,此处设置为空

);

if(!hWnd)

return FALSE;                         //创建窗口失败,返回FALSE

ShowWindow(hWnd,nCmdShow);              //显示窗口

UpdateWindow(hWnd);  //更新窗口

while(GetMessage(&msgTmp,NULL,0,0))

{

TranslateMessage(&msgTmp);            //翻译消息

DispatchMessage(&msgTmp);             //将消息传递给处理函数

}

return msgTmp.wParam;                     //返回消息的附加参数

}

编译出错:使用VC2005 Express版时找不到msvcr80d.dll文件

解决方法:在"属性->配置属性->清单工具->常规"下有一个"使用FAT32解决办法“,把它选成“是”,再重新生成解决方案(重新编译)!(注意:一定要先配置这个选项,然后再编译工程,要不然还是不好用)
5)利用MFC类库开发Windows 应用程序

文件—〉新建—〉项目à Visual C++——〉win32——〉win32项目—〉win32应用程序—〉空项目—〉添加源文件

#include <afxwin.h>  //MFC头文件

class CHelloApp:public CWinApp //建立应用程序类的实例

{

public:

virtual     BOOL InitInstance();

};

CHelloApp theApp;

class CMainFrame:public CFrameWnd //声明主窗口类

{

public:

CMainFrame()

{

Create(NULL,"I love U",WS_OVERLAPPEDWINDOW,CRect(0,0,400,300));

}

protected:

afx_msg void OnLButtonDown(UINT nFlags,CPoint point);

afx_msg void OnRButtonDown(UINT nFlags,CPoint point);

DECLARE_MESSAGE_MAP()

};

//消息映射入口

BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)

ON_WM_LBUTTONDOWN() //单击鼠标左键的映射宏

ON_WM_RBUTTONDOWN()

END_MESSAGE_MAP()

//定义消息映射函数

void CMainFrame::OnLButtonDown(UINT nFlags,CPoint point)

{

MessageBox("万古长空","hello");

CFrameWnd::OnLButtonDown(nFlags,point);

}

void CMainFrame::OnRButtonDown(UINT nFlags,CPoint point)

{

MessageBox("一朝风月","hello");

CFrameWnd::OnRButtonDown(nFlags,point);

}

//每当应用程序执行时都要调用的初始化函数

BOOL CHelloApp::InitInstance()

{

m_pMainWnd=new CMainFrame();

m_pMainWnd->ShowWindow(m_nCmdShow);

m_pMainWnd->UpdateWindow();

return TRUE;

}

注意1:项目属性—〉配置属性—〉常规—〉MFC的使用—〉在共享DLL中使用MFC

或在静态中使用MFC。

编译错误:error C2664: ‘CFrameWnd::Create‘ : cannot convert parameter 2 from ‘const char [9]‘ to ‘LPCTSTR‘

Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

解决方法:项目属性—〉配置属性—〉常规—〉字符集—〉多字节字符集

时间: 2024-10-12 14:45:17

Visual Studio 2005 学习笔记一 入门的相关文章

Visual Studio 2005 自带单元测试

一 单元测试简介 单元测试是代码正确性验证的最重要的工具,也是系统测试当中最重要的环节.也是唯一需要编写代码才能进行测试的一种测试方法.在标准的开发过程中,单元测试的代码与实际程序的代码具有同等的重要性.每一个单元测试,都是用来定向测试其所对应的一个单元的数据是否正确. 单元测试是由程序员自己来完成,最终受益的也是程序员自己.可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试.执行单元测试,就是为了证明这段代码的行为和我们期望的一致. 单元测试还具有一下几个好处:  能

Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104

Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104一.WINVER  Compile result:  WINVER not defined. Defaulting to 0x0502 (Windows Server 2003)  windows   server   2003    winver>=0x0502         windows   xp      winver>=0x0501         windows

现代C++学习笔记之一入门篇:智能指针(C++ 11)

原始指针:通过new建立的*指针 智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针 在现代 C++ 编程中,标准库包含智能指针,该指针用于确保程序不存在内存和资源泄漏且是异常安全的. 在现代 C++ 中,原始指针仅用于范围有限的小代码块.循环或者性能至关重要且不会混淆所有权的 Helper 函数中. 1 void UseRawPointer() 2 { 3 // Using a raw pointer -- not recommended

在 Oracle 数据库上使用 Visual Studio 2005 或 2008 构建 .NET 应用程序 了解构建使用 Oracle 数据库的 .NET 应用程序所涉及到的基本但不可或缺的过程。

随着 Microsoft 的 .NET Framework 的日益流行,许多开发人员迫切想了解关于将 .NET 应用程序与 Oracle 集成的最佳方法的信息 - 不仅在基本连通性方面,还包括与使用 Visual Studio 2005 或 2008 进行有效应用程序开发的关系. 在本文中,我将说明构建使用 Oracle 数据库的 .NET 应用程序所涉及到的基本但不可或缺的过程,包括: 如何添加工程引用,以在您的 .NET 工程中支持 Oracle 类 如何创建 Oracle 数据库连接字符串

springmvc学习笔记(5)-入门程序小结

springmvc学习笔记(5)-入门程序小结 springmvc学习笔记5-入门程序小结 入门程序配置小结 非注解的完整的配置文件 注解的完整配置文件 通过入门程序理解springmvc前端控制器.处理器映射器.处理器适配器.视图解析器用法.并附上入门程序的非注解的完整的配置文件,注解的完整配置文件. 入门程序配置小结 前端控制器配置: 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以访问的地址都由DispatcherServl

Visual Studio 2005 搭建Windows CE 6.0环境之准备

Microsoft Visual Studio 2005 Visual Studio 2005 Professional 官方90天试用版英文版:http://download.microsoft.com/download/e/0/4/e04de840-8f6b-4fe5-ac3d-d3ad8e4c2443/En_vs_2005_Pro_90_Trial.img中文版:http://download.microsoft.com/download/5/c/2/5c2840fd-8b03-492e-

visual studio 2005提示脚本错误 /VC/VCWizards/2052/Common.js

今天在做OCX添加接口的时候,莫名其妙的遇到visual studio 2005提示脚本错误,/VC/VCWizards/2052/Common.js. 网上找了很多资料,多数介绍修改注册表“vs2005 MFC资源编辑添加成员变量向导出现脚本错误的解决方法”,或者重装ie8. 整了半天,重启vs2005或者windows都不好使. 最后发现把vs2005的中间目录删除了就可以正常使用了. 这种情况比较坑,整理下以作记录,后续可参考.

SQL 2005 学习笔记

http://wenku.baidu.com/view/a99b3e8abb68a98271fefaed N 年的 SQL 2005 学习笔记

Unity3d_学习笔记_入门

转自:http://blog.csdn.net/zlfxy/article/details/8722437 本文内容来自“编程教父”的视频课程. 1.Unity3d一个游戏引擎,可以用来开发很多游戏. 要利用Unity3d开发游戏,我们首先要下载一个Unity3d软件.下载后,下载一个破解补丁,这样就可以正常进行开发了. 2.Unity3d每次只能开启一个工程项目. (1)Unity3d中比较重要的一个对象就是摄像机了,摄像机就相当于我们人的眼睛,有了摄像机,运行程序后,才能够有视野. (2)U