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 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 // 为了使用Console::WriteLine方法 #include // 为了使用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 ^args) { Console::WriteLine(L"Hello World from CLR console application."); return 0; } 3) MFC编写windows控制台应用程序 文件—〉新建—〉项目à Visual C++——〉win32——〉win32控制台应用程序—〉控制台应用程序—〉空项目 #include //必需 #include // 必需 #include 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系统规定每个消息处理函数的定义形式都相同 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 //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 解决方法:项目属性—〉配置属性—〉常规—〉字符集—〉多字节字符集
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值