0

为了将用户界面类(一个 Windows 窗体类)与程序的其余部分分开,我试图从 int WINAPI WinMain () 调用 Windows 窗体方法

例如,我正在尝试执行以下操作:

int WINAPI WinMain(HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{   
    Application::EnableVisualStyles();
    UserInterface1 ^myInterface = gcnew UserInterface1();   

    String ^ picture1 = "img1";
    String ^ picture2 = "img2";

    Application::Run(myInterface); 

    Bitmap^ B = gcnew Bitmap (512,512);

    //user defined class that reads an image from a file
    PImage PI(picture1);

    //a Windows Forms method that updates the image displayed in a pictureBox element
    myInterface->ModifyDisplay (B, PI);

    //user defined class that reads an image from a file
    PImage PI2(picture2);

    //a Windows Forms method that updates the image displayed in a pictureBox element
    myInterface->ModifyDisplay (B, PI2);

    return 0;
}

不用说,它并没有像现在这样工作,而且我不确定我正在尝试做的事情是否可行,因为我对 .Net 编程还很陌生。

4

2 回答 2

1

它看起来像'Application::Run(myInterface);' 在完成必须做的事情之前不会返回,这没什么

这不是什么。Application::Run最重要的是启动 Windows事件消息泵。这个事件循环是让你的应用程序保持活力和运行的原因。Application::Run只有当这个循环退出时才会返回。

当您关闭主窗体或尝试从任务管理器等关闭进程时,事件循环通常会退出。

这意味着在Application::Run返回时,您的myInterface表单已经关闭 - 这使得它下面的其余代码无用。您可以将该代码移动到类似Form's 的Load事件中。

于 2013-07-29T13:23:28.890 回答
0

确切地说,“Application::Run()”之后的代码将在表单关闭时运行。我建议您创建两个表单,例如“Form1”和“Form2”(使用线程是另一种方式,但这种方式更容易)。

使用“Form1”作为隐藏的基本表单,它用于通过从文件中获取图像来更新应用程序。

使用“Form2”作为 UserInterface1。为此,如果您是新手,您应该像这样在“Form1”中运行“Form2”:

// Inside Form1.
#include "Form2.h"
Form2 ^openForm2 = gcnew Form2();
openForm2->Show();

最后,您可以在 Form1 中运行 ModifyDisplay 函数。

openForm->ModifyDisplay();
于 2014-01-12T13:48:49.407 回答