How to upgrade code from Console::WriteLine() to Message box

A

Allen Maki

/*

Console::WriteLine() I am trying to use message box instead of
Console::WriteLine() to upgrade my code from just using the console to using
GUI.

In the bottom 2 lines, #1 works, but I have hard time to make # 2 works. Can
anybody give a hand here to make the information to be shown on the message
box instead of being shown on the console.

I am using visual C++ .NET 2003

Thanks

*/



















#include "stdafx.h"

#include <gcroot.h>

#using <mscorlib.dll>

using namespace System;

using namespace System::Runtime::InteropServices;

typedef void* HWND;

[DllImportAttribute("User32.dll", CharSet=CharSet::Auto)]

extern "C" int MessageBox(HWND hw, String* text,

String* caption, unsigned int type);

__gc class MClass

{

public:

int val;

MClass(int n) //costructor

{

val = n;

}

};

class UClass

{

public :

gcroot<MClass*> mc;

UClass(MClass* pmc) //constructor

{

mc = pmc;

}

int getValue() //get function

{

return mc->val;

}

};

int _tmain()

{

Console::WriteLine(S"Testing...");

//Create a managed object and assign 3 to it

MClass* pm = new MClass (3);

//Create an unmanaged object and assign the value of the manged object (pm)
to it

UClass uc(pm);


Console::WriteLine(S"Value is {0}", __box(uc.getValue())); //<-------- This
will work # 1

//MessageBox(0, uc.getValue(), S"Message Box...", 0 ); //<------- this will
not work # 2





return 0;

}
 
M

Morten Wennevik [C# MVP]

Hi,

I cannot comment on your code as I have never done managed C++, but to go from a console application to a windows application, you need to reference System.Windows.Forms.dll, inherit from System.Windows.Forms.Form, attach a message loop (in C# done with Application.Run(new MyForm()); from the static Main method), and output the compiled code as winexe (it will still run if you compile it to a console application but it will then open a console window before the WinForm shows).
 
P

Peter Duniho

[...]
//MessageBox(0, uc.getValue(), S"Message Box...", 0 ); //<------- this
will
not work # 2

There are a variety of ways to do what you want, but the basic idea is
this: you need to pass a fully-formed string to the MessageBox.Show()
method. Off the top of my head, something like this should work:

MessageBox.Show(String.Format(S"Value is {0}", __box(uc.getValue())));

Please note that I do very little managed C++ stuff; there may be a more
readable way to write the above. I pretty much just based it on what you
already wrote, along with what I know about MessageBox. But hopefully you
get the idea.

Pete
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top