Re: Accessing form elements inside the program's main function?
On 24 Aug 2006 10:58:46 -0700, "Mike Gaskins" <mbgaski@clemson.edu> wrote:
Ok, just as a warning, I'm very, very new to Visual C++. I have always
traditionally use Borland C++ Builder but Microsoft released the free
Visual C++ (Express) and I had to try it out.
Ok, I'm working on a GUI application that really won't have any
interactivity. It has a simple form (Form1) with two elements: a
progress bar (progressBar) and a label (statusLabel).
My goal is to just have the main function load the gui, then go through
and do some processing (updating the label and progress bar as it goes)
and exit after finishing.
My main function so far is just the auto generated stub shown below.
My problem is that progressBar and statusLabel aren't in scope within
this function, and I don't know how to access them to change their
values.
Any help on this would be greatly appreciated.
int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Create the main window and run it
Application::Run(gcnew Form1());
Application::
return 0;
}
The Form1 class must handle its own display, and Windows GUI programs must
conform to the event-driven model. Assuming you at least want the user to
be able to quit your program, the modern way to accomplish your goal is to:
1. Start a new thread to do the work.
2. Have the thread post user-defined messages (based on WM_APP) to the form
window.
3. Have the form window update its display in response to the messages it
receives from the thread.
4. While the thread is running, the form window can process other messages
it receives, such as a user exit request.
The old way is to run a PeekMessage loop, and I think the CLR equivalent to
that would be an Application.DoEvents loop:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.application.doevents.aspx
--
Doug Harrison
Visual C++ MVP