Visual Studio 2005 學習筆記一 入門

來源:互聯網
上載者:User

標籤:

轉載自: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> //托換代碼和Unmanaged 程式碼混合編程

// managed.cpp : 定義控制台應用程式的進入點。

#include "stdafx.h"

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

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

using namespace System;

// 聲明Unmanaged 程式碼

#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

解決方案:項目屬性—〉配置屬性—〉常規—〉字元集—〉多位元組字元集

Visual Studio 2005 學習筆記一 入門

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.