标题:求助: 工作区尺寸与窗口尺寸
只看楼主
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
结帖率:97.22%
 问题点数:0 回复次数:2 
求助: 工作区尺寸与窗口尺寸
求助: 工作区尺寸与窗口尺寸


工作区高度和窗口高度都是720p, 为什么窗口和任务栏之间,还有一道空隙。。。


程序代码:
#pragma once

namespace Zoom {

    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>
    /// Form1 摘要
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO:  在此处添加构造函数代码
            //
        }

    protected:
        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::TableLayoutPanel^ tableLayoutPanel1;
    protected:
    private: System::Windows::Forms::PictureBox^ pictureBox1;
    private: System::Windows::Forms::PictureBox^ pictureBox2;

    private:
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        void InitializeComponent(void)
        {
            this->tableLayoutPanel1 = (gcnew System::Windows::Forms::TableLayoutPanel());
            this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
            this->pictureBox2 = (gcnew System::Windows::Forms::PictureBox());
            this->tableLayoutPanel1->SuspendLayout();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->BeginInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox2))->BeginInit();
            this->SuspendLayout();
            // 
            // tableLayoutPanel1
            // 
            this->tableLayoutPanel1->ColumnCount = 2;
            this->tableLayoutPanel1->ColumnStyles->Add((gcnew System::Windows::Forms::ColumnStyle(System::Windows::Forms::SizeType::Percent,
                66.66666F)));
            this->tableLayoutPanel1->ColumnStyles->Add((gcnew System::Windows::Forms::ColumnStyle(System::Windows::Forms::SizeType::Percent,
                33.33333F)));
            this->tableLayoutPanel1->Controls->Add(this->pictureBox1, 0, 0);
            this->tableLayoutPanel1->Controls->Add(this->pictureBox2, 1, 0);
            this->tableLayoutPanel1->Dock = System::Windows::Forms::DockStyle::Fill;
            this->tableLayoutPanel1->Location = System::Drawing::Point(0, 0);
            this->tableLayoutPanel1->Name = L"tableLayoutPanel1";
            this->tableLayoutPanel1->RowCount = 1;
            this->tableLayoutPanel1->RowStyles->Add((gcnew System::Windows::Forms::RowStyle(System::Windows::Forms::SizeType::Percent, 100)));
            this->tableLayoutPanel1->Size = System::Drawing::Size(784, 522);
            this->tableLayoutPanel1->TabIndex = 0;
            // 
            // pictureBox1
            // 
            this->pictureBox1->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(192)), static_cast<System::Int32>(static_cast<System::Byte>(255)),
                static_cast<System::Int32>(static_cast<System::Byte>(192)));
            this->pictureBox1->Dock = System::Windows::Forms::DockStyle::Fill;
            this->pictureBox1->Location = System::Drawing::Point(3, 3);
            this->pictureBox1->Name = L"pictureBox1";
            this->pictureBox1->Size = System::Drawing::Size(516, 516);
            this->pictureBox1->TabIndex = 0;
            this->pictureBox1->TabStop = false;
            this->pictureBox1->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::pictureBox1_MouseDown);
            // 
            // pictureBox2
            // 
            this->pictureBox2->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(255)), static_cast<System::Int32>(static_cast<System::Byte>(192)),
                static_cast<System::Int32>(static_cast<System::Byte>(192)));
            this->pictureBox2->Dock = System::Windows::Forms::DockStyle::Fill;
            this->pictureBox2->Location = System::Drawing::Point(525, 3);
            this->pictureBox2->Name = L"pictureBox2";
            this->pictureBox2->Size = System::Drawing::Size(256, 516);
            this->pictureBox2->TabIndex = 1;
            this->pictureBox2->TabStop = false;
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(784, 522);
            this->Controls->Add(this->tableLayoutPanel1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
            this->Resize += gcnew System::EventHandler(this, &Form1::Form1_Resize);
            this->tableLayoutPanel1->ResumeLayout(false);
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->EndInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox2))->EndInit();
            this->ResumeLayout(false);

        }
#pragma endregion

    //确保pictureBox1为正方形的情况下,窗口允许最大尺寸
    private: void SetMaxSize()
    {
        int maxwidth = Screen::PrimaryScreen->WorkingArea.Width;
        int maxheight = Screen::PrimaryScreen->WorkingArea.Height;
        if (maxwidth > ((maxheight - 39) * 3) / 2 + 16)
            maxwidth = ((maxheight - 39) * 3) / 2 + 16;
        else if (maxheight > ((maxwidth - 16) * 2) / 3 + 39)
            maxheight = ((maxwidth - 16) * 2) / 3 + 39;
        this->MaximumSize = System::Drawing::Size(maxwidth, maxheight);
    }
    private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) 
    {
        SetMaxSize();            //设置窗口最大尺寸
    }
private: System::Void Form1_Resize(System::Object^ sender, System::EventArgs^ e)
{
    Control^ control = dynamic_cast<Control^>(sender);

    //拖动窗口比例缩放,确保pictureBox1 Size 为正方形.
    int swidth = control->Size.Width;
    int sheight = control->Size.Height;

    if (sheight > 28) //sheight > 28 窗口不是最小化。
    {
        int maxwidth = Screen::PrimaryScreen->WorkingArea.Width;
        int maxheight = Screen::PrimaryScreen->WorkingArea.Height;

        if (swidth > maxwidth)
            swidth = maxwidth;

        sheight = ((swidth - 16) * 2) / 3 + 39;

        if (sheight > maxheight)
        {
            sheight = maxheight;
            swidth = ((sheight - 39) * 3) / 2 + 16;
        }

        control->Size = System::Drawing::Size(swidth, sheight);
    }
}
private: System::Void pictureBox1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)
{
    Image^ MyImage = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height);

    Graphics^ g = Graphics::FromImage(MyImage);

    String^ outstr = "Screen::PrimaryScreen->Bounds.Width = ";
    outstr += Screen::PrimaryScreen->Bounds.Width.ToString();
    outstr += "\r\n";
    outstr += "Screen::PrimaryScreen->Bounds.Height = ";
    outstr += Screen::PrimaryScreen->Bounds.Height.ToString();
    outstr += "\r\n";
    outstr += "PrimaryScreen->WorkingArea.Width = ";
    outstr += Screen::PrimaryScreen->WorkingArea.Width.ToString();
    outstr += "\r\n";
    outstr += "PrimaryScreen->WorkingArea.Height = ";
    outstr += Screen::PrimaryScreen->WorkingArea.Height.ToString();
    outstr += "\r\n";
    outstr += "Form1_Width = ";
    outstr += this->Width.ToString();
    outstr += "\r\n";
    outstr += "Form1_Height = ";
    outstr += this->Height.ToString();
    outstr += "\r\n";
    outstr += "pictureBox1_Width = ";
    outstr += pictureBox1->Width.ToString();
    outstr += "\r\n";
    outstr += "pictureBox1_Height = ";
    outstr += pictureBox1->Height.ToString();
    System::Drawing::Font^ drawFont = gcnew System::Drawing::Font("Arial", 22);
    SolidBrush^ drawBrush = gcnew SolidBrush(Color::Black);

    // Create point for upper-left corner of drawing.
    PointF drawPoint = PointF(20.0F, 50.0F);
    g->DrawString(outstr, drawFont, drawBrush, drawPoint);

    this->pictureBox1->Image = (Image^)MyImage->Clone();
    delete drawFont;
    delete drawBrush;
    delete MyImage;
}
};
}
搜索更多相关主题的帖子: Windows System Forms 窗口 Size 
2022-09-03 12:31
zzz3265
Rank: 2
等 级:论坛游民
威 望:1
帖 子:14
专家分:10
注 册:2022-2-6
得分:0 
窗体的大小, 还有客户区大小是不一样的
最大化一般是客户区的大小全部显示到屏幕, 比如1920*1080屏幕, 窗体最大化后
窗体大小: 1936*1050
客户区大小: 1920*1034
2022-09-11 12:04
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:399
专家分:190
注 册:2021-4-9
得分:0 
回复 2楼 zzz3265
不理解,不过已经找到解决方法了。。
宽和高,都加16像素就可以了。。。。
2022-09-11 18:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509942-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.511342 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved