Skocz do zawartości

Operowanie na MessageBox.Show()


FanXX

Rekomendowane odpowiedzi

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

  • Administratorzy

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

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...