如何将 Windows 窗体应用程序 (C++) 设置为具有 Aero/Glass 背景?

发布于 2024-11-25 08:09:53 字数 7100 浏览 4 评论 0原文

我正在使用 Visual Studio 2010 Pro 用 C++ 创建 Windows 窗体应用程序。我想创建一个透明背景,即使用 Aero Glass 效果,类似于它围绕 Windows 照片查看器中 UI 底部的方式。此时,我已经查看了所有功能,虽然您可以更改颜色和不透明度,但这并不完全是我想要的。我想要那种漂亮的模糊玻璃效果。

我从 Visual Studio 提供的模板代码开始这个项目,所以我没有太多可以链接的内容。我刚刚从工具箱中添加了一些项目,并将它们链接到 Form1.h 文件中的函数。我对我的缺乏投入表示歉意,我对 Windows UI 编程还很陌生;我希望我可以添加更多信息。为了简单起见,这里是 Form1.h 代码:

#pragma once


namespace Secret { //my project's name is "Secret"

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
        //
    }

protected:
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    ~Form1()
    {
        if (components)
        {
            delete components;
        }
    }
private: System::Windows::Forms::Button^  button1;
private: System::Windows::Forms::RichTextBox^  richTextBox1;
private: System::Windows::Forms::TextBox^  textBox1;
private: Microsoft::VisualBasic::PowerPacks::ShapeContainer^  shapeContainer1;
private: Microsoft::VisualBasic::PowerPacks::RectangleShape^  rectangleShape1;
private: Microsoft::VisualBasic::PowerPacks::LineShape^  lineShape1;
private: Microsoft::VisualBasic::PowerPacks::OvalShape^  ovalShape2;
private: Microsoft::VisualBasic::PowerPacks::OvalShape^  ovalShape1;
protected: 

private:
    /// <summary>
    /// Required designer variable.
    /// </summary>
    System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    void InitializeComponent(void)
    {
        this->button1 = (gcnew System::Windows::Forms::Button());
        this->richTextBox1 = (gcnew System::Windows::Forms::RichTextBox());
        this->textBox1 = (gcnew System::Windows::Forms::TextBox());
        this->shapeContainer1 = (gcnew Microsoft::VisualBasic::PowerPacks::ShapeContainer());
        this->lineShape1 = (gcnew Microsoft::VisualBasic::PowerPacks::LineShape());
        this->ovalShape2 = (gcnew Microsoft::VisualBasic::PowerPacks::OvalShape());
        this->ovalShape1 = (gcnew Microsoft::VisualBasic::PowerPacks::OvalShape());
        this->rectangleShape1 = (gcnew Microsoft::VisualBasic::PowerPacks::RectangleShape());
        this->SuspendLayout();
        // 
        // button1
        // 
        this->button1->Location = System::Drawing::Point(107, 171);
        this->button1->Name = L"button1";
        this->button1->Size = System::Drawing::Size(75, 23);
        this->button1->TabIndex = 0;
        this->button1->Text = L"Save";
        this->button1->UseVisualStyleBackColor = true;
        this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
        // 
        // richTextBox1
        // 
        this->richTextBox1->Location = System::Drawing::Point(12, 12);
        this->richTextBox1->Name = L"richTextBox1";
        this->richTextBox1->Size = System::Drawing::Size(260, 126);
        this->richTextBox1->TabIndex = 1;
        this->richTextBox1->Text = L"";
        this->richTextBox1->TextChanged += gcnew System::EventHandler(this, &Form1::richTextBox1_TextChanged);
        // 
        // textBox1
        // 
        this->textBox1->Location = System::Drawing::Point(13, 145);
        this->textBox1->Name = L"textBox1";
        this->textBox1->Size = System::Drawing::Size(259, 20);
        this->textBox1->TabIndex = 2;
        this->textBox1->Text = L"filename.txt";
        // 
        // shapeContainer1
        // 
        this->shapeContainer1->Location = System::Drawing::Point(0, 0);
        this->shapeContainer1->Margin = System::Windows::Forms::Padding(0);
        this->shapeContainer1->Name = L"shapeContainer1";
        this->shapeContainer1->Shapes->AddRange(gcnew cli::array< Microsoft::VisualBasic::PowerPacks::Shape^  >(4) {this->lineShape1, 
            this->ovalShape2, this->ovalShape1, this->rectangleShape1});
        this->shapeContainer1->Size = System::Drawing::Size(290, 268);
        this->shapeContainer1->TabIndex = 3;
        this->shapeContainer1->TabStop = false;
        // 
        // lineShape1
        // 
        this->lineShape1->Name = L"lineShape1";
        this->lineShape1->X1 = 14;
        this->lineShape1->X2 = 270;
        this->lineShape1->Y1 = 228;
        this->lineShape1->Y2 = 228;
        // 
        // ovalShape2
        // 
        this->ovalShape2->Location = System::Drawing::Point(135, 207);
        this->ovalShape2->Name = L"ovalShape2";
        this->ovalShape2->Size = System::Drawing::Size(20, 44);
        // 
        // ovalShape1
        // 
        this->ovalShape1->Location = System::Drawing::Point(16, 208);
        this->ovalShape1->Name = L"ovalShape1";
        this->ovalShape1->Size = System::Drawing::Size(252, 42);
        // 
        // rectangleShape1
        // 
        this->rectangleShape1->Location = System::Drawing::Point(14, 206);
        this->rectangleShape1->Name = L"rectangleShape1";
        this->rectangleShape1->Size = System::Drawing::Size(257, 46);
        // 
        // Form1
        // 
        this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
        this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
        this->BackColor = System::Drawing::SystemColors::Control;
        this->BackgroundImageLayout = System::Windows::Forms::ImageLayout::None;
        this->ClientSize = System::Drawing::Size(290, 268);
        this->Controls->Add(this->textBox1);
        this->Controls->Add(this->richTextBox1);
        this->Controls->Add(this->button1);
        this->Controls->Add(this->shapeContainer1);
        this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::Fixed3D;
        this->MaximizeBox = false;
        this->Name = L"Form1";
        this->Text = L"Secret";
        this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
        this->ResumeLayout(false);
        this->PerformLayout();

    }
#pragma endregion
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
         }
private: System::Void richTextBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
         }
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
         }
};
}

感谢您的帮助!我很感激。

I am working on creating a Windows Forms Application in C++ using Visual Studio 2010 Pro. I wanted to create a transparent background, that is, using the Aero Glass effect, similar to the way it surrounds the bottom of the UI in Windows Photo Viewer. At this point, I've looked through all of the features, and while you can change color and opacity, it's not exactly what I'm looking for. I want that nice blurred glass effect.

I started this project from the template code that Visual Studio gives you, so I don't really have much to link. I just added a few items from the toolbox and linked them to functions in the Form1.h file. I apologize for my lack of input, I'm quite new to Windows UI programming; I wish I could add more information. For the sake of simplicity, here is the Form1.h code:

#pragma once


namespace Secret { //my project's name is "Secret"

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
        //
    }

protected:
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    ~Form1()
    {
        if (components)
        {
            delete components;
        }
    }
private: System::Windows::Forms::Button^  button1;
private: System::Windows::Forms::RichTextBox^  richTextBox1;
private: System::Windows::Forms::TextBox^  textBox1;
private: Microsoft::VisualBasic::PowerPacks::ShapeContainer^  shapeContainer1;
private: Microsoft::VisualBasic::PowerPacks::RectangleShape^  rectangleShape1;
private: Microsoft::VisualBasic::PowerPacks::LineShape^  lineShape1;
private: Microsoft::VisualBasic::PowerPacks::OvalShape^  ovalShape2;
private: Microsoft::VisualBasic::PowerPacks::OvalShape^  ovalShape1;
protected: 

private:
    /// <summary>
    /// Required designer variable.
    /// </summary>
    System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    void InitializeComponent(void)
    {
        this->button1 = (gcnew System::Windows::Forms::Button());
        this->richTextBox1 = (gcnew System::Windows::Forms::RichTextBox());
        this->textBox1 = (gcnew System::Windows::Forms::TextBox());
        this->shapeContainer1 = (gcnew Microsoft::VisualBasic::PowerPacks::ShapeContainer());
        this->lineShape1 = (gcnew Microsoft::VisualBasic::PowerPacks::LineShape());
        this->ovalShape2 = (gcnew Microsoft::VisualBasic::PowerPacks::OvalShape());
        this->ovalShape1 = (gcnew Microsoft::VisualBasic::PowerPacks::OvalShape());
        this->rectangleShape1 = (gcnew Microsoft::VisualBasic::PowerPacks::RectangleShape());
        this->SuspendLayout();
        // 
        // button1
        // 
        this->button1->Location = System::Drawing::Point(107, 171);
        this->button1->Name = L"button1";
        this->button1->Size = System::Drawing::Size(75, 23);
        this->button1->TabIndex = 0;
        this->button1->Text = L"Save";
        this->button1->UseVisualStyleBackColor = true;
        this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
        // 
        // richTextBox1
        // 
        this->richTextBox1->Location = System::Drawing::Point(12, 12);
        this->richTextBox1->Name = L"richTextBox1";
        this->richTextBox1->Size = System::Drawing::Size(260, 126);
        this->richTextBox1->TabIndex = 1;
        this->richTextBox1->Text = L"";
        this->richTextBox1->TextChanged += gcnew System::EventHandler(this, &Form1::richTextBox1_TextChanged);
        // 
        // textBox1
        // 
        this->textBox1->Location = System::Drawing::Point(13, 145);
        this->textBox1->Name = L"textBox1";
        this->textBox1->Size = System::Drawing::Size(259, 20);
        this->textBox1->TabIndex = 2;
        this->textBox1->Text = L"filename.txt";
        // 
        // shapeContainer1
        // 
        this->shapeContainer1->Location = System::Drawing::Point(0, 0);
        this->shapeContainer1->Margin = System::Windows::Forms::Padding(0);
        this->shapeContainer1->Name = L"shapeContainer1";
        this->shapeContainer1->Shapes->AddRange(gcnew cli::array< Microsoft::VisualBasic::PowerPacks::Shape^  >(4) {this->lineShape1, 
            this->ovalShape2, this->ovalShape1, this->rectangleShape1});
        this->shapeContainer1->Size = System::Drawing::Size(290, 268);
        this->shapeContainer1->TabIndex = 3;
        this->shapeContainer1->TabStop = false;
        // 
        // lineShape1
        // 
        this->lineShape1->Name = L"lineShape1";
        this->lineShape1->X1 = 14;
        this->lineShape1->X2 = 270;
        this->lineShape1->Y1 = 228;
        this->lineShape1->Y2 = 228;
        // 
        // ovalShape2
        // 
        this->ovalShape2->Location = System::Drawing::Point(135, 207);
        this->ovalShape2->Name = L"ovalShape2";
        this->ovalShape2->Size = System::Drawing::Size(20, 44);
        // 
        // ovalShape1
        // 
        this->ovalShape1->Location = System::Drawing::Point(16, 208);
        this->ovalShape1->Name = L"ovalShape1";
        this->ovalShape1->Size = System::Drawing::Size(252, 42);
        // 
        // rectangleShape1
        // 
        this->rectangleShape1->Location = System::Drawing::Point(14, 206);
        this->rectangleShape1->Name = L"rectangleShape1";
        this->rectangleShape1->Size = System::Drawing::Size(257, 46);
        // 
        // Form1
        // 
        this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
        this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
        this->BackColor = System::Drawing::SystemColors::Control;
        this->BackgroundImageLayout = System::Windows::Forms::ImageLayout::None;
        this->ClientSize = System::Drawing::Size(290, 268);
        this->Controls->Add(this->textBox1);
        this->Controls->Add(this->richTextBox1);
        this->Controls->Add(this->button1);
        this->Controls->Add(this->shapeContainer1);
        this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::Fixed3D;
        this->MaximizeBox = false;
        this->Name = L"Form1";
        this->Text = L"Secret";
        this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
        this->ResumeLayout(false);
        this->PerformLayout();

    }
#pragma endregion
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
         }
private: System::Void richTextBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
         }
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
         }
};
}

Thank you for any and all help! I appreciate it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我很坚强 2024-12-02 08:09:53

您正在寻找的是 DWM(桌面窗口管理器)API,尤其是函数 DwmExtendFrameIntoClientArea.

下面是一些 C# 代码,演示了如何执行此操作: CodeProject

另外,请确保启用桌面合成时不要扩展框架,否则您将遇到问题

What you're looking for is the DWM (Desktop Window Manager) API, especially the function DwmExtendFrameIntoClientArea.

Here's some C# code that demonstrates how to do this: CodeProject

Also, make sure not to extend the frame when desktop composition is enabled, or you'll run into problems.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文