zoukankan      html  css  js  c++  java
  • 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. ";

           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 ", 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

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

  • 相关阅读:
    圆形按钮窗口控制-不断减少的圆圈
    图像按钮和模拟Windows媒体播放器UI
    圆形按钮
    本机Win32主题感知所有者绘制控件没有MFC
    CRegionButton -一个多向按钮
    Iconits
    CxShadeButton
    管道符 |
    gedit
    more/less
  • 原文地址:https://www.cnblogs.com/killer-xc/p/4915882.html
Copyright © 2011-2022 走看看