помогите в простенькой программе.
От: vuler  
Дата: 16.11.04 16:47
Оценка:
Программа вроде простая — делал ее по уроку. Вот решил ее немного видоизменить и зашел в тупик.
в общем в этой программе при запуске создается панель состояния. Я сделал так чтобы эта панель убивалась при двойном нажатии правой кнопки мыши, но вот когда попробовал ее возрадить с помощью двойного нажатия левой кнопки мыши — ничего не вышло. ( хотя вроде все правильно сделал. Вот листинг..подскажите что да как..буду очень благодарен.


    #include "afxwin.h"
    #include "afxext.h"
    #define IDC_MYBUTTO 1220
    #define IDC_MYEDIT 102
    #define y 120

    class CMyButton: public CButton
    {
    public:
    CMyButton(int x);
    int z;
    afx_msg void OnLButtonDblClk(UINT, CPoint);
    afx_msg void OnRButtonDblClk(UINT, CPoint);
    private:
    DECLARE_MESSAGE_MAP();
    };

    void CMyButton::OnLButtonDblClk(UINT, CPoint)
    {
    z=z+1;
    MoveWindow(CRect(120,100,220,z),TRUE);
    }

    void CMyButton::OnRButtonDblClk(UINT, CPoint)
    {
    MoveWindow(CRect(120,10,220,50),TRUE);
    }

    BEGIN_MESSAGE_MAP(CMyButton, CButton)
    ON_WM_LBUTTONDBLCLK()
    ON_WM_RBUTTONDBLCLK()
    END_MESSAGE_MAP()

    CMyButton::CMyButton(int x)
    {
    z=x;
    };


    class CMainWnd : public CFrameWnd
    {
    public:
    CMainWnd();
    afx_msg void OnLButtonDblClk(UINT, CPoint);
    afx_msg void OnRButtonDblClk(UINT, CPoint);
    afx_msg void OnKeyDown(UINT, UINT, UINT);
    int OnCreate(LPCREATESTRUCT lpCreateStruct);
    CStatusBar* fm_wndStatusBar;
    ~CMainWnd();
    private:
    CStatic* MyStatic;
    CMyButton* MyButton;
    CEdit* MyEdit;

    DECLARE_MESSAGE_MAP();
    };

    CMainWnd::CMainWnd()
    {
    Create(NULL,"hi",WS_OVERLAPPEDWINDOW,CRect(0,0,400,400),
    NULL,NULL);
    MyStatic = new CStatic();
    if (MyStatic!=NULL) MyStatic->Create("hi",WS_CHILD|WS_VISIBLE|SS_CENTER,
    CRect(10,10,100,50),this);
    MyButton = new CMyButton(120);
    if (MyButton!=NULL) MyButton->Create("MyButton",WS_CHILD|WS_VISIBLE|SS_CENTER,
    CRect(120,10,220,50),this,IDC_MYBUTTO);
    MyEdit = new CEdit();
    if (MyEdit!=NULL) MyEdit->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,
    CRect(240,10,340,50),this,IDC_MYEDIT);


    }

    CMainWnd::~CMainWnd()
    {
    if (MyStatic!=NULL) delete MyStatic;
    if (MyButton!=NULL) delete MyButton;
    if (MyEdit!=NULL) delete MyEdit;
    }

    BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)
    ON_WM_LBUTTONDBLCLK()
    ON_WM_RBUTTONDBLCLK()
    ON_WM_KEYDOWN()
    ON_WM_CREATE()
    END_MESSAGE_MAP()
    void CMainWnd::OnKeyDown(UINT, UINT, UINT)
    {

    AfxMessageBox(" Key Button Down ");
    if(MyButton!=NULL)
    {
    delete MyButton;
    MyButton=NULL;
    }

    }

    void CMainWnd::OnRButtonDblClk(UINT, CPoint)
    {
    AfxMessageBox(" Rigth Button Click ");
    if(fm_wndStatusBar!=NULL)
    {
    delete fm_wndStatusBar;
    fm_wndStatusBar=NULL;
    };
    }

    void CMainWnd::OnLButtonDblClk(UINT, CPoint)
    {
    if(fm_wndStatusBar==NULL)
    {
    fm_wndStatusBar=new CStatusBar();
    fm_wndStatusBar->Create(this);
    };
    AfxMessageBox(" Left Button Click ");
    }

    int CMainWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    fm_wndStatusBar = new CStatusBar;
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;
    if(fm_wndStatusBar!=NULL)
    {
    fm_wndStatusBar->Create(this);
    return 0;
    };
    return 0;
    }


    class CMyApp : public CWinApp
    {
    public:
    CMyApp();
    virtual BOOL InitInstance();
    };

    CMyApp::CMyApp()
    {}

    BOOL CMyApp::InitInstance()
    {
    m_pMainWnd=new CMainWnd();
    ASSERT(m_pMainWnd);
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    return TRUE;
    };

    CMyApp theApp;
Re: помогите в простенькой программе.
От: Crystalizer Украина  
Дата: 16.11.04 16:52
Оценка:
у тебя
if(fm_wndStatusBar==NULL)
а надо
if(fm_wndStatusBar!=NULL)
как я понял...
Re[2]: помогите в простенькой программе.
От: vuler  
Дата: 16.11.04 16:56
Оценка:
не..не помогло
Re[3]: помогите в простенькой программе.
От: L2-Max Украина  
Дата: 16.11.04 23:07
Оценка:
Здравствуйте, vuler, Вы писали:

V>не..не помогло


после того как создашь заново статусбар вызови RecalcLayout()
L2-Max
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.