开发者

How to set Windows Forms Application (C++) to have an Aero/Glass background?

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.
    开发者_如何学Python/// </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.


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜