微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

wxWidgets:类wxDialog *无法转换为类wxApp *

如何解决wxWidgets:类wxDialog *无法转换为类wxApp *

问题恰恰是标题中的内容,我的wxWidgets应用程序崩溃了,因为从对话框类到应用程序类的转换不起作用。有帮助吗?

错误消息:

错误C2440:“正在初始化”:无法从“ MP *”转换为“ MPApp *”

错误C2664:'void wxAppBase :: SetTopWindow(wxWindow *)':无法将参数1从'MPApp *'转换为'wxWindow *'

错误C2039:“显示”:不是“ MPApp”的成员

MPApp.cpp:

#include "MPApp.h"
#include "MP.h"

IMPLEMENT_APP(MPApp)

bool MPApp::OnInit()
{
    MPApP* dialog = new MP((NULL));
    SetTopWindow(dialog);
    dialog->Show(true);
    return true;
}

int MPApp::OnExit()
{
    return 0;
}

MPApp.h:

#ifndef __MPApp_h__
#define __MPApp_h__

#ifdef __BORLANDC__
#pragma hdrstop
#endif

#ifndef WX_PRECOMP
#include <wx/wx.h>
#else
#include <wx/wxprec.h>
#endif

class MPApp : public wxApp
{
public:
    bool OnInit();
    int OnExit();
};

#endif

MP.h:

#ifndef __MP_h__
#define __MP_h__

#ifdef __BORLANDC__
#pragma hdrstop
#endif

#ifndef WX_PRECOMP
#include <wx/wx.h>
#include <wx/dialog.h>
#else
#include <wx/wxprec.h>
#endif

#include <list>


#include <wx/menu.h>
#include <wx/timer.h>
#include <wx/listctrl.h>
#include <wx/textctrl.h>
#include <wx/stattext.h>
#include <wx/checkBox.h>
#include <wx/mediactrl.h>
#include <wx/slider.h>
#include <wx/button.h>
#include <wx/bmpbuttn.h>
#include <wx/panel.h>
#include <wx/sizer.h>
#include <wx/toplevel.h>

#undef MPSTYLE
#define MPSTYLE wxWANTS_CHARS | wxALWAYS_SHOW_SB | wxCAPTION | wxRESIZE_BORDER | wxSYstem_MENU  | wxDIALOG_NO_PARENT | wxMINIMIZE_Box | wxMAXIMIZE_Box | wxCLOSE_Box

class MP : public wxDialog
{
private:
    DECLARE_EVENT_TABLE();
public:
    //Constuctor
    MP(wxWindow* parent,wxWindowID id = 0,const wxString& title = wxT("Music"),const wxPoint& pos = wxDefaultPosition,const wxSize& size = wxDefaultSize,long style = MPSTYLE);
    virtual ~MP();
    //Player
    void PlayFileNow();
    // EVENTS
    // Command Events
    void AddToQueue(wxCommandEvent& event);
    void WxButton1Click(wxCommandEvent& event);
    void PlayButtonClick(wxCommandEvent& event);
    void NextButtonClick(wxCommandEvent& event);
    void PrevIoUsButtonClick(wxCommandEvent& event);
    void StopButtonClick(wxCommandEvent& event);
    void RandomCheckBoxClick(wxCommandEvent& event);
    void WxButton2Click(wxCommandEvent& event);
    void SavePlaylistClick(wxCommandEvent& event);
    void LoadplaylistClick(wxCommandEvent& event);
    void AddButtonClick(wxCommandEvent& event);
    void PlaylistsButtonClick(wxCommandEvent& event);
    void FindButtonClick(wxCommandEvent& event);
    void FindTextEditEnter(wxCommandEvent& event);
    void FindNextButtonClick(wxCommandEvent& event);
    void FindPrevButtonClick(wxCommandEvent& event);
    //Media Events
    void WxMediaCtrl1MediaFinished(wxMediaEvent& event);
    void WxMediaCtrl1MediaPause(wxMediaEvent& event);
    void WxMediaCtrl1MediaPlay(wxMediaEvent& event);
    void WxMediaCtrl1MediaStop(wxMediaEvent& event);
    void WxMediaCtrl1MediaLoaded(wxMediaEvent& event);
    //Key Events
    void HotKeyNext(wxKeyEvent& event);
    void HotKeyStop(wxKeyEvent& event);
    void HotKeyPlay(wxKeyEvent& event);
    void HotKeyPrev(wxKeyEvent& event);
    //List Events
    void WxListCtrl1ColLeftClick(wxListEvent& event);
    void WxListCtrl1ColRightClick(wxListEvent& event);
    void WxListCtrl1RightClick(wxListEvent& event);
    void WxListCtrl1ItemActivated(wxListEvent& event);
    void WxListCtrl1KeyDown(wxListEvent& event);
    //UI Event
    void SavePlaylistUpdateUI0(wxUpdateUIEvent& event);
    //Scroll Events
    void WxSlider2Scroll(wxScrollEvent& event);
    void WxSlider1Scroll(wxScrollEvent& event);
    //Timer Event
    void WxTimer1Timer(wxTimerEvent& event);
    //File Event
    void MPDropFiles(wxDropFilesEvent& event);
    //Mouse Event
    void MPRightUP(wxMouseEvent& event);
private:
//GUI Control
    //Menu items
    wxMenu* PlaylistMenu;
    wxMenu* WxPopupMenu1;
    wxMenu* AddMenu;
    //Timer item
    wxTimer* WxTimer1;
    //List item
    wxListCtrl* WxListCtrl1;
    //Button items
    wxButton* FindPrevButton;
    wxButton* FindNextButton;
    wxButton* AddButton;
    wxButton* PlaylistsButton;
    wxButton* FindButton;
        //Bitmaps
    wxBitmapButton* PlayButton;
    wxBitmapButton* PrevIoUsButton;
    wxBitmapButton* NextButton;
    //Text items
    wxTextCtrl* FindTextEdit;
    wxStaticText* WxStaticText1;
    //Slider items
    wxSlider* WxSlider2;
    wxSlider* WxSlider1;
    //Panel items
    wxPanel* SearchPanel;
    wxPanel* WxPanel1;
    wxPanel* WxPanel;
    //Check item
    wxCheckBox* RandomCheckBox;
    //Media item
    wxMediaCtrl* WxMediaCtrl1;
    //Sizer items
    wxFlexGridSizer* WxFlexGridSizer1;
    wxBoxSizer* WxBoxSizer1;
private:
    //Enum IDs for GUI
    enum
    {
        ////GUI Enum Control ID Start
        ID_MNU_LOAdplAYLIST_1028 = 1028,ID_MNU_SAVEPLAYLIST_1029 = 1029,ID_MNU_PLAY_PAUSE_1019 = 1019,ID_MNU_STOP_1020 = 1020,ID_MNU_NEXT_1021 = 1021,ID_MNU_PREVIoUS_1022 = 1022,ID_MNU_ADDFOLDER_1023 = 1023,ID_MNU_SAVEPLAYLIST_1024 = 1024,ID_MNU_LOAdplAYLIST_1025 = 1025,ID_MNU_ADDFILES_1026 = 1026,ID_MNU_ADDFOLDER_1027 = 1027,ID_WXTIMER1 = 1017,ID_WXLISTCTRL1 = 1015,ID_FINDPREVBUTTON = 1034,ID_FINDNEXTBUTTON = 1033,ID_FINDEDITTXT = 1044,ID_WXSTATICTEXT1 = 1032,ID_SEARCHPANEL = 1031,ID_FINDBUTTON = 1030,ID_RANDOMCHECKBox = 1018,ID_WXMEDIACTRL1 = 1016,ID_WXSLIDER2 = 1014,ID_WXSLIDER1 = 1013,ID_ADDBUTTON = 1008,ID_PLAYLISTS = 1007,ID_NEXTBUTTON = 1006,ID_STOPBUTTON = 1005,ID_PLAYBUTTON = 1004,ID_PREVIoUSBUTTON = 1003,ID_WXPANEL2 = 1002,ID_WXPANEL1 = 1011,////GUI Enum Control ID End
        ID_HOT_PLAY,ID_HOT_STOP,ID_HOT_NEXT,ID_HOT_PREV,ID_DUMMY_VALUE_ //don't remove this value unless you have other enum values
    };

private:
    void OnClose(wxCloseEvent& event);
    void CreateGUIControls();
protected:
    // No description
    void AddFilesFromFolder(wxString FileName);
    //FileList Dirs,Files;
    //wxTreeItemId root;
    bool isPlaying;
    long selItem;
    // No description
    void PlayThisFile(long id);
    // No description
    void PlayFromQueue();
    std::list<wxString> lastPlayed,nextPlay;
    // No description
    void PlayNextFile();
    void deselectAllFiles();

};

#endif

由于文件的长度,我无法包含MP.cpp,但是它可以很好地编译,并且我已经调试了问题。

解决方法

您为什么会期望这一行:

    MPApp* dialog = new MP((NULL));

上班吗?您的MPwxDialog,即一种顶层窗口。它与MPApp完全不同,后者是一种应用程序对象。

也许这只是一个错字,你真的想写

    MP* dialog = new MP((NULL));

但是,如果不是,那么您应该真正问自己自己想要在这里实现什么。

相切地,使用非模式对话框也是很不寻常的(模态对话框将显示为ShowModal(),而不仅仅是Show(),并且是在堆栈上而不是在堆栈上创建的堆)。对于普通的非模式窗口,wxFrame几乎总是一个更好的选择。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。