рд╣рдо рд╕реНрдЯреАрдорд╡рд░реНрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рднрд╛рдЧ рей

рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ, рдпреВрдЬрд░рд╕реНрдЯреЗрдЯреНрд╕ рдФрд░ wxWidgets рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИред рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреАрдпреВрдЖрдИ рдЖрд╡реЗрджрди рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрдкрд▓рдмреНрдзрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред


рд╣рдореЗрдВ wxWidgets рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг 2.8.12 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВ рдФрд░ рддреИрдпрд╛рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ:

"  "\build\msw\wx.dsw 

рдпрд╛ рддреЛ VS20xx x86 рдиреЗрдЯрд┐рд╡ рдЯреВрд▓ рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ:

 nmake /f makefile.vc 

рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдорд┐рдВрдЧ рд╣реИ:

 mingw32-make -f makefile.gcc 

рдмрд┐рд▓реНрдб рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд▓рд┐рдм рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рд╕рдВрдХрд▓рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдпрд╛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред

WxWidgets рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

 #include "wx/wx.h" 


рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░ OnInit () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

 class MyApp: public wxApp { virtual bool OnInit(); }; 


рд╣рдо рдЕрдкрдиреЗ рдлреНрд░реЗрдо рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдВрдбреЛред

 class MyFrame: public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); void OpenFile(wxCommandEvent& event); void InitializeSteam(); // SteamWorks void WriteImage(wxString CurrentDocPath); //    . void ShowAchievements(); //     EditBox. CSteamAPILoader loader; ISteamUserStats002* userStats; ISteamScreenshots001* screenShots; ISteamClient012* Client; wxTextCtrl *MainEditBox; wxString CurrentDocPath; DECLARE_EVENT_TABLE() }; 

рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдЖрдИрдбреА рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ред

 enum { ID_Quit = 1, ID_About, ID_Open, TEXT_Main }; //  BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Quit, MyFrame::OnQuit) // . EVT_MENU(ID_About, MyFrame::OnAbout) //   . EVT_MENU(ID_Open, MyFrame::OpenFile) //    . END_EVENT_TABLE() IMPLEMENT_APP(MyApp) //  main   wxWidgets. 

OnInit рд╡рд┐рдзрд┐ рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

 bool MyApp::OnInit() { wxInitAllImageHandlers(); //      . putenv("SteamAppId=1250"); // 1250 Appid = KillingFloor -   . MyFrame *frame = new MyFrame( _("Fake Uploader"), wxPoint(50, 50), //  . wxSize(1024,768) ); frame->Show(true); //   . SetTopWindow(frame); //    . return true; } 

рд╣рдо рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреАрдорд╡рд░реНрдХреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред

 MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame( NULL, -1, title, pos, size ) { //   wxMenu *menuFile = new wxMenu; menuFile->Append(ID_Open, _("&Open and write"), _("Open an existing file")); menuFile->Append( ID_About, _("&About...") ); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( menuFile, _("&File") ); SetMenuBar( menuBar ); CreateStatusBar(); SetStatusText( _("Welcome to Steam fake image uploader") ); // C   . SetBackgroundColour(wxColour(240,240,240)); // . MainEditBox = new wxTextCtrl(this, ID_MainText, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_RICH , wxDefaultValidator, wxTextCtrlNameStr); // Edit Box    InitializeSteam(); } 

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛ред

 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(TRUE); } 

рдореЗрдиреВ рдореЗрдВ рд╕рдВрд╡рд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox( _("Fake uploader by Dinisoid"), _("Fake uploader"), wxOK | wxICON_INFORMATION, this); } 

рдЬрдм рд╣рдо Open рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡рд╣ рдбрд╛рдпрд▓реЙрдЧ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

 void MyFrame::OpenFile(wxCommandEvent& WXUNUSED(event)) { //       . wxFileDialog *OpenDialog = new wxFileDialog(this, wxFileSelectorPromptStr, wxEmptyString, wxEmptyString, _("Images|*.png;*.bmp;*.gif;*.tiff;*.jpg;*.jpeg"), wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE); if (OpenDialog->ShowModal() == wxID_OK) //    . { CurrentDocPath = wxT("C:/"); CurrentDocPath = OpenDialog->GetPath(); SetTitle(wxString("Choosen - ") << OpenDialog->GetFilename()); //      . wxArrayString paths; OpenDialog->GetPaths(paths); for(unsigned int i = 0; i < paths.GetCount(); i++) //    . { WriteImage(paths[i]); //     . } } } 

рд╣рдо рд╕реНрдЯреАрдо рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрдкрд▓рдмреНрдзрд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

 void MyFrame::InitializeSteam() { Client = (ISteamClient012 *)loader.GetSteam3Factory()(STEAMCLIENT_INTERFACE_VERSION_012, NULL); if ( !Client ) { printf("Unable to get ISteamClient."); } HSteamPipe pipe = Client->CreateSteamPipe(); if ( !pipe ) { printf("Unable to get pipe"); } HSteamUser user = Client->ConnectToGlobalUser( pipe ); if ( !user ) { printf("Unable connect to global user"); } screenShots = (ISteamScreenshots001*)Client->GetISteamScreenshots(user, pipe, STEAMSCREENSHOTS_INTERFACE_VERSION_001); userStats = (ISteamUserStats002 *)Client->GetISteamUserStats(user, pipe, STEAMUSERSTATS_INTERFACE_VERSION_002); ShowAchievements(); } 


рд╣рдо рдПрдХ рдирдХрд▓реА рдЫрд╡рд┐ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВред

 void MyFrame::WriteImage(wxString CurrentDocPath) { wxImage image(CurrentDocPath); //wxMessageOutput::Get()->Printf("%d %d", image.GetWidth(),image.GetHeight()); //      ScreenshotHandle hScreen = screenShots->WriteScreenshot(image.GetData(), image.GetWidth() * image.GetHeight() * 3, image.GetWidth(), image.GetHeight()); Sleep(100); } 

рд╣рдо EditBox-e рдореЗрдВ рдЙрдкрд▓рдмреНрдзрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред

 void MyFrame::ShowAchievements() { CGameID Kfgame(1250); // id . userStats->RequestCurrentStats(Kfgame); //    uint32 maxAchievements = userStats->GetNumAchievements(Kfgame); //    bool data; if (maxAchievements > 0) { for (uint32 x = 0; x < maxAchievements; x++) { const char *name = userStats->GetAchievementName(Kfgame, x); userStats->GetAchievement(Kfgame,name,&data); //     . if(!data) //    { MainEditBox->AppendText(wxString(name) + "\n"); //     EditBox //userStats->SetAchievement(GameID,AchName); //  ,   . } } } userStats->StoreStats(Kfgame); //  } 

рдПрдХ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг ред

рд╣рдо рдореБрдЦреНрдп рд╕рдВрдкрд╛рджрди рдмреЙрдХреНрд╕ рдореЗрдВ рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХреА рдЧрдИ рдЙрдкрд▓рдмреНрдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдлрд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ-> рдЦреЛрд▓реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВред

Source: https://habr.com/ru/post/In158219/


All Articles