我的第一篇文章。我正在尝试使用 Windows 窗体和 C++。我有一些(基本)问题。到目前为止的目标是编写一个程序来检查某个硬件是否通过 USB 端口插入,但在我开始真正的工作之前,我想完成 GUI,它会通知是否找到了硬件。
所以我有一个标准表单(Form1.h),然后我有主方法所在的 cpp 类(usbStatus.cpp)和另一个 cpp 文件(connection.cpp),我打算在其中放置代码进行搜索对于想要的硬件。在启动时,表单显示一个设置了背景颜色 RED 的 statusButton 和一个 statusLabel,上面写着“正在搜索硬件”。然后我希望当其他代码(尚未编写)完成搜索硬件时,按钮背景颜色变为绿色(如果找到硬件)并标记为“找到硬件”。嗯……什么都没有发生。我已经检查了痕迹并且代码已处理但没有可见的结果。我试过 Invalidate() 和 Refresh() 都没有成功。
我现在只有很少的东西看起来很像这样:
表格1.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;
}