FanXX Opublikowano 3 Kwietnia 2013 Udostępnij Opublikowano 3 Kwietnia 2013 Cześć wszystkim, robię własnie DLL z funkcjami które zamieniają okienka w GameMaker te show_message na takie windowsowe. I mam problem. Chciałbym aby za pomocą GM wywołać okienko napisane w DLL'u gdzie jest MB_YESNO i gdy klikne Yes to biblioteka DLL zwróci wartość 1 dla GM'a a jeśli No to wartość 0. Nie chciałbym korzystać z DLL jak WinApi bo to za bardzo rozbudowana biblioteka. Tu podaje kody które używam: Na dole też napisałem troche jaśniej. DLL (Mała część tej DLL) - pisane w Dev C++ GML #include <windows.h> #include <string> #include <sstream> #define GMEXPORT extern "C" __declspec (dllexport) using namespace std; template <typename T> string to_string(const T & value) { stringstream sstr; sstr << value; return sstr.str(); } GMEXPORT double MessageInstall(double a) { if (a == 0) { string mynum(to_string("")); mynum += "Wiadomość z nowym wyglądem!"; MessageBoxA(NULL, mynum.c_str(), "Błąd", MB_ICONERROR | MB_OK); return 0; } Skrypt w GameMaker ae_msg_init() GML global.dllmsginstall = external_define("ae_msg.dll", "MessageInstall", dll_cdecl, ty_real, 2, ty_real, ty_real); //Inicjacja DLL i funkcji global.dllmsginfo = external_define("ae_msg.dll", "MessageInfo", dll_cdecl, ty_real, 2, ty_real, ty_real); //Inicjacja DLL i funkcji</span></span></span></span> Skrypt ae_msg(argument0) wywołania wiadomości w GM np klawiszem GML external_call(global.dllmsginstall, argument0,argument0); //użycie funkcji biblioteki gdzie argument0 to /* argument0 = 0 - jakiś błąd */ //pokazuje wiadomość w zależności od numeru argumentu O_o</span></span></span></span> Użycie GML ae_msg(0); Wiem że cięzko mnie zrozumieć. Chciałbym tak że w skrypcie GM np msg('Tekst'); wywołuje okienko wiadomości gdzie jest MB_YESNO i gdy w GM klikne przycisk Tak to GM albo ten dll zwróci wartość 1. Ewentualnie w razie to jest nie możliwe to będe musiał coś wymyśleć z WinApi. PS: To pierwszy dll więc nie krytykujcie :( @EDIT Próbowałem też z if (MessageBox.Show ("jakis tekst", "Naglowek", MessageBoxButtons.YESNO, MessageBoxIcon.Error); {to coś tam} albo coś tam ale nie wiem jak zwrócić warunek 0 lub jeden do GM bo z GM do DLL wiem Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Kwietnia 2013 Administratorzy Udostępnij Opublikowano 4 Kwietnia 2013 http://msdn.microsoft.com/en-us/library/wi...5(v=vs.85).aspx zgodnie z informacją co funkcja zwraca i na podstawie twojego kodu, ja bym to zrobił tak (ale nie znam C++): return (MessageBoxA(NULL, mynum.c_str(), "Błąd", MB_ICONERROR | MB_OK) == 1) ? 1 : 0; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 4 Kwietnia 2013 Udostępnij Opublikowano 4 Kwietnia 2013 Pokazuje okienko z Tak/Nie. Zwraca 1 jeśli tak, jeśli Nie to 0. GMEXPORT double MBoxYesNo(char* text, char* caption) { return (MessageBox(NULL, text, caption, MB_YESNO | MB_ICONQUESTION) == IDYES ? 1 : 0); } Nie chciałbym korzystać z DLL jak WinApi bo to za bardzo rozbudowana biblioteka. Mała uwaga. Ty cały czas korzystasz z WinApi :) (windows.h). A no i zmień środowisko na Code::Blocks albo Visuala. Dużo wygodniej się pisze. Jak będziesz chciał zrobić inne message boxy to skorzystaj z linku który podał gnysek. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
FanXX Opublikowano 4 Kwietnia 2013 Autor Udostępnij Opublikowano 4 Kwietnia 2013 Wielkie dzięki wam gnysek i Utermiko. Z linku skorzystam na pewno a kod Utermika był dobry. Visual posiadam tylko że odczuwam wrażenie jak by kod C++ był nie co inny a Dev jest łatwy w sumie. Pisze te teksty w DLL bo chce potem wprowadzić języki :) i szybki dostęp do update. Pozdro! W razie kolejnych problemów będę tu pisał Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się