问大家一个问题,如何在一个ATL工程中加载一个非模态的dialog!谢谢了,我愿意拿出我一个月的薪水请大家去吃大餐!

解决方案 »

  1.   

    可能大家不知道我的名字,但是我的车牌号码大家一定都知道:甲A00001,我向大家求救了,wylcy() 谢谢你,虽然你的答案也没有什么用,但是你却是唯一告诉我答案的人,谢谢你!
      

  2.   

    若要创建有模式对话框,请创建 CDialogImpl 派生类(或 CAxDialogImpl 派生类)的实例,然后调用 DoModal 方法。若要关闭有模式对话框,请从消息处理程序调用 EndDialog 方法。若要创建无模式对话框,请调用 Create 方法,而不是 DoModal。若要销毁无模式对话框,请调用 DestroyWindow。
      

  3.   

    CAboutDlg *dlg=new CAboutDlg();
    dlg->Create(m_hWnd,rcDefault,NULL);
    dlg->ShowWindow(SW_SHOW);
      

  4.   

    另外,别忘了创建之前加这句话:
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
      

  5.   

    楼上的大哥,你给我的那句话是mfc里面的,在ATL里面不能这样创建啊!
      

  6.   

    没有问题的在WTL中,使用ATL也没有问题,我试过,CAboutDlg为
    #pragma onceclass CAboutDlg : public CDialogImpl<CAboutDlg>
    {
    public:
    enum { IDD = IDD_ABOUTBOX }; BEGIN_MSG_MAP(CAboutDlg)
    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
    COMMAND_ID_HANDLER(IDOK, OnCloseCmd)
    COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd)
    END_MSG_MAP()// Handler prototypes (uncomment arguments if needed):
    // LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
    // LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    // LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/) LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
    {
    //CenterWindow(GetParent());
    return TRUE;
    } LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
    this->DestroyWindow();
    //EndDialog(wID);
    return 0;
    }
    };
      

  7.   

    在CMainFrame中的代码,为CGirdView不要
    #pragma onceclass CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFrame>,
    public CMessageFilter, public CIdleHandler
    {
    public:
    DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME) CGirdView m_view; CCommandBarCtrl m_CmdBar; virtual BOOL PreTranslateMessage(MSG* pMsg)
    {
    if(CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg))
    return TRUE;
    return FALSE;
    } virtual BOOL OnIdle()
    {
    UIUpdateToolBar();
    return FALSE;
    } BEGIN_UPDATE_UI_MAP(CMainFrame)
    UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
    UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
    END_UPDATE_UI_MAP() BEGIN_MSG_MAP(CMainFrame)
    MESSAGE_HANDLER(WM_CREATE, OnCreate)
    COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
    COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew)
    COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar)
    COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
    COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
    CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
    CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
    END_MSG_MAP()// Handler prototypes (uncomment arguments if needed):
    // LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
    // LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    // LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/) LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
    {
    // create command bar window
    HWND hWndCmdBar = m_CmdBar.Create(m_hWnd, rcDefault, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE);
    // attach menu
    m_CmdBar.AttachMenu(GetMenu());
    // load command bar images
    m_CmdBar.LoadImages(IDR_MAINFRAME);
    // remove old menu
    SetMenu(NULL); HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd, IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE); CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE);
    AddSimpleReBarBand(hWndCmdBar);
    AddSimpleReBarBand(hWndToolBar, NULL, TRUE); CreateSimpleStatusBar(); m_hWndClient = m_view.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);

    GRID_ATTRIBUTION gridAttr;
    gridAttr.mask=GDMASK_ROWACROSSCOLOR|GDMASK_COLWIDTH|GDMASK_ROWHEIGHT|GDMASK_BKCOLOR;
    gridAttr.rowColor2=RGB(200,40,40);
    gridAttr.rowColor1=RGB(180,20,20);
    gridAttr.gridBkColor=RGB(0,200,0);
    gridAttr.baseColWidth=50;
    gridAttr.baseRowHeight=20;
    m_view.InitGrid(100,100,&gridAttr);

    for(int i=1;i<=100;i++)
    {
    CComPtr<IIntegerCell> cellValue;
    m_view.RequestCell((ULONG)i,1,INSTANCECELL_IF_NOT_EXISTING,CLSID_IntegerCell,IID_IIntegerCell,(void **)&cellValue);
    cellValue->put_value(i);
    }

    m_view.AppendRow(NULL);
    m_view.CombinationCell(1,1,2,1);
    m_view.CombinationCell(1,2,1,3);
    m_view.CombinationCell(1,5,1,3); UIAddToolBar(hWndToolBar);
    UISetCheck(ID_VIEW_TOOLBAR, 1);
    UISetCheck(ID_VIEW_STATUS_BAR, 1);

    // register object for message filtering and idle updates
    CMessageLoop* pLoop = _Module.GetMessageLoop();
    ATLASSERT(pLoop != NULL);
    pLoop->AddMessageFilter(this);
    pLoop->AddIdleHandler(this); return 0;
    } LRESULT OnFileExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
    PostMessage(WM_CLOSE);
    return 0;
    } LRESULT OnFileNew(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
    // TODO: add code to initialize document return 0;
    } LRESULT OnViewToolBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
    static BOOL bVisible = TRUE; // initially visible
    bVisible = !bVisible;
    CReBarCtrl rebar = m_hWndToolBar;
    int nBandIndex = rebar.IdToIndex(ATL_IDW_BAND_FIRST + 1); // toolbar is 2nd added band
    rebar.ShowBand(nBandIndex, bVisible);
    UISetCheck(ID_VIEW_TOOLBAR, bVisible);
    UpdateLayout();
    return 0;
    } LRESULT OnViewStatusBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
    BOOL bVisible = !::IsWindowVisible(m_hWndStatusBar);
    ::ShowWindow(m_hWndStatusBar, bVisible ? SW_SHOWNOACTIVATE : SW_HIDE);
    UISetCheck(ID_VIEW_STATUS_BAR, bVisible);
    UpdateLayout();
    return 0;
    }
    LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
    CAboutDlg *dlg=new CAboutDlg();
    dlg->Create(m_hWnd,rcDefault,NULL);
    dlg->ShowWindow(SW_SHOW);
    //dlg.DoModal();
    return 0;
    }};
      

  8.   

    我写的是一个模态对话框,测试没有问题,要的话留下mail.