我是根据VISUAL C++从入门到精通这本书上步骤,建立了一个工程:
1. 打开Visual C++(如果还没有打开的话)。
2. 使用File | New 命令打开New 对话框,然后选择Project 选项卡。本例中,我们将在工程类型列表中选择MFC AppWizard(EXE)工程类型。
3. 在Project Name 域中键入应用程序的名称。本样本程序使用的名称为Dialog,但你也可以使用任何自己喜欢的名称。必要时修改Location 域的值(单击Location 域旁边的按钮进行选择)。
4. 单击OK 按钮,你会看到如下图所示的MFC AppWizard - Step 1对话框。
5. 选择Dialog Based 选项按钮,然后单击Next,系统显示如下图所示的MFCAppWizard - Step 2 of 4对话框。
6. 在Please Enter a Title for Your Dialog 域中键入Sample DialogApplication。注意,在这个对话框中可以给应用程序增加一些其它特性,比如上下文相关帮助等。Automation 复选框允许把OLE 自动化功能添加到应用程序中。你也可以在这个对话框中对应用程序增加Windows Sockets 支持——该支持允许应用程序通过TCP/IP 网络进行通信。7. 单击Next,然后再单击Next。我们不需要改变这两个对话框中的设置,但应该知道它们的作用。前一个对话框让你选择是否要在代码中添加注释。你还可以选择MFC是静态还是动态链接到应用程序中。
8. 单击Finish。Visual C++显示如下图所示的New Project Information 对话框。这是你确保各种设置都正确无误的最后一次机会。不正确的设置选择将延长工程的开发时间而不是缩短开发时间。
9. 单击OK。MFC AppWizard 将生成应用程序的框架。
现在我们已经得到了一个可以使用的基本程序框架,到了实际开始编写示例程序的时候了。由于这个程序要使用Microsoft Calendar 控件,所以我们要做的第一件事就是安装所需的ActiveX 控件。使用Project | Add to Project | Components and Controls 命令显示如下图所示的Components and Controls Gallery 对话框。双击Registered ActiveX Controls 文件夹,你就会看到机器中已经注册的一系列控件。找到Calendar Control 8.0(我的机器是日历控件10) 列表项(这是本版Visual C++携带的控件之一),然后单击Insert。Visual C++将显示一个对话框询问是否真要把这个控件插入到工程中。单击OK。Visual C++将添加某些包装类到应用程序中,以便为其提供该ActiveX 控件。Visual C++在如下图所示的Confirm Classes 对话框中显示这些类的类名。单击OK 接受缺省的ActiveX 控件类设置。现在我们有了一个可以使用的新控件,它被添加到了工具箱中。单击Close 按钮关闭Components and Controls
Gallery对话框。
现在到了设计对话框的时候了。图2.1 显示了设计好的对话框。该对话框的当前大小为300×200,我把Calendar 控件的大小调整为230×186,这样该控件上的数字就看得清楚些了。请注意,虽然该应用程序现在并没有运行,但Calendar控件依然立即显示当前日期,这是由于在把ActiveX 控件放置到对话框上时,该控件自动激活了自身。如果在你把某个控件放置到对话框上时并没有发生其它反应,或许该控件没有正确地安装。显然,需要检查控件的文档以确保控件按所期待的方式工作。如果现在编译和运行这个应用程序,你会发现它只是个半成品.(我这时进行编译,没问题,只是点确定后就结束了)日历会让你选择新的日期,单击OK 按钮后对话框也会消失,但也只是如此,该程序现在还没有更多的其它功能。图2.1 加入控件后,基于对话框的示例程序开始成型了在给Calendar 控件添加代码之前,我们还要为它创建一个成员变量。创建成员变量是件简单的事,按住CTRL 键双击Calendar 控件,系统显示如下图所示的Add Member Variable 对话框。
由于该控件是应用程序中使用的第一个Calendar 控件,因此在m_(不要删除m_)后键入Calendar1,单击OK创建该变量。(添加这个变量后,再进行编译就出错,提示:\示例源程序\visual c++从入门到精通\diag\calendar.h(53) : error C2556: 'class COleFont __thiscall CCalendar::Get(void)' : overloaded function differs only by return type from 'unsigned long __thiscall CCalendar::Get(void)'
        e:\示例源程序\visual c++从入门到精通\diag\calendar.h(49) : see declaration of 'Get'再比较,与前一次多了一个calendar.h文件)
.下一步要完成的任务是检测用户是否改变了该控件。右击Calendar 控件,你会看到一个上下文菜单,从中选择Events,系统显示如下图所示的New Windows Message and Event Handlers 对话框。
该对话框包含了控件可以监视的所有事件的完整列表。程序员在设计该控件时设置了这些事件。在本例的情况下,我们要监视DblClick 事件。加亮DblClick事件列表项,然后单击Add and Edit 按钮,Visual C++显示Add Member Function对话框。单击OK 接受缺省的函数名,你会看到一个空的函数体。现在我们要完成的任务就是加些代码让函数正常工作。

解决方案 »

  1.   

    问题继续:
    以下是calendar.h的内容
    #if !defined(AFX_CALENDAR_H__0D6960F1_2AE1_40C9_A46C_A99830F91BA7__INCLUDED_)
    #define AFX_CALENDAR_H__0D6960F1_2AE1_40C9_A46C_A99830F91BA7__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++// NOTE: Do not modify the contents of this file.  If this class is regenerated by
    //  Microsoft Visual C++, your modifications will be overwritten.
    // Dispatch interfaces referenced by this interface
    class COleFont;/////////////////////////////////////////////////////////////////////////////
    // CCalendar wrapper classclass CCalendar : public CWnd
    {
    protected:
    DECLARE_DYNCREATE(CCalendar)
    public:
    CLSID const& GetClsid()
    {
    static CLSID const clsid
    = { 0x8e27c92b, 0x1264, 0x101c, { 0x8a, 0x2f, 0x4, 0x2, 0x24, 0x0, 0x9c, 0x2 } };
    return clsid;
    }
    virtual BOOL Create(LPCTSTR lpszClassName,
    LPCTSTR lpszWindowName, DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd, UINT nID,
    CCreateContext* pContext = NULL)
    { return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); }    BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
    const RECT& rect, CWnd* pParentWnd, UINT nID,
    CFile* pPersist = NULL, BOOL bStorage = FALSE,
    BSTR bstrLicKey = NULL)
    { return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
    pPersist, bStorage, bstrLicKey); }// Attributes
    public:// Operations
    public:
    unsigned long Get();
    void Set(unsigned long newValue);
    short Get_1(); // Get日
    void Set_2(short nNewValue); // Set日
    COleFont Get();错误指在这里
    void Set(LPDISPATCH newValue);

    long Get();
    void Set(long nNewValue); short Get_3(); // Get月
    void Set_4(short nNewValue); // Set月

    BOOL Get();
    void Set(BOOL bNewValue);

    VARIANT Get_5(); // Get值
    void Set_6(const VARIANT& newValue); // Set值

    short Get_7(); // Get年
    void Set_8(short nNewValue); // Set年
    void NextDay();
    void NextMonth();
    void NextWeek();
    void NextYear();
    void PreviousDay();
    void PreviousMonth();
    void PreviousWeek();
    void PreviousYear();
    void Refresh();
    void Today();
    void AboutBox();
    };//{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_CALENDAR_H__0D6960F1_2AE1_40C9_A46C_A99830F91BA7__INCLUDED_)
      

  2.   

    CCalendar::Get(void) 多个定义,仅仅返回值不同,不能区分。
      

  3.   

    可这个calendar.h是VC自己产生的,也会错吗?还有好几个重复的GET()函数.
      

  4.   

    有Get_1(); Get_3(); 中间那个是不是应该是Get_2(); 
      

  5.   

    帖一下stdafx.h中的#import语句怎么写的