0

私の最初の投稿。Windows フォームと C++ を試しています。いくつかの (基本的な) 質問があります。ここまでの目標は、特定のハードウェアが USB ポートに接続されているかどうかを確認するプログラムを作成することですが、実際の作業に入る前に、ハードウェアが見つかったかどうかを通知する GUI を完成させたいと考えていました。
したがって、標準フォーム (Form1.h) があり、メイン メソッドが存在する cpp クラス (usbStatus.cpp) と、検索するコードを配置する予定の別の cpp ファイル (connection.cpp) があります。必要なハードウェア用。フォームの起動時に、背景色が赤で設定された statusButton と、"Searching hardware" という statusLabel が表示されます。次に、他のコード (まだ作成されていません) がハードウェアの検索を終了すると、ボタンの背景色が緑色に変わり (HW が見つかった場合)、ラベルが「ハードウェアが見つかりました」になるようにしたいと思います。うーん...何も起こりません。トレースを確認したところ、コードは処理されましたが、目に見える結果はありませんでした。Invalidate() と Refresh() を試しましたが成功しませんでした。

私が今持っている非常に小さなものは、次のように見えます。

Form1.h

namespace usbStatus{

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

    /// <summary>
    /// Summary for Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //

        }
    ...

    void InitializeComponent(void)
        {

    ...
    this->statusButton = (gcnew System::Windows::Forms::ToolStripButton());
    this->statusLabel = (gcnew System::Windows::Forms::ToolStripLabel());
    ....

    void InitializeComponent(void)
    {
    ...
    }

ファイルの最後に、次のメソッドを追加しました

public: void Form1::UpdateStatusElements(Color color) 
{
    statusButton->BackColor = color;
    if (color == System::Drawing::Color::Green){
        //statusprogressBar->Enabled = false;
        statusLabel->Text = "Hardware found";
    } else {
        ...

usbStatus.cpp

#include "stdafx.h"
#include "Form1.h"
#include "Connection.h"

using namespace UsbStatus;


[STAThreadAttribute]
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());
    Form1 ^mainWindow = gcnew Form1();
    Application::Run(mainWindow);

if(Connection::GetStatus()) 
    mainWindow->UpdateStatusElements(System::Drawing::Color::Green);
else
    //mainWindow->UpdateStatusElements(System::Drawing::Color::Red);
delete mainWindow;
return 0;
}

接続.h

#pragma once
#include "Form1.h"



ref class Connection
{
    private:
        static void CheckStatus();
        static void SetStatus(bool connected);
        static bool hwConnected;

    public:
        static bool GetStatus();

};

接続.cpp

#include <windows.h>
#include "Connection.h"

using namespace UsbStatus;

...

bool Connection::GetStatus()
{
    CheckStatus();
    return true;
    //return hwConnected;
}
4

1 に答える 1