VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 343|回复: 7

求助:如果实现自动Size(wide, height)

[复制链接]
38_avatar_middle
最佳答案
0 
在线会员 发表于 2022-6-9 00:34:57 | 显示全部楼层 |阅读模式
求助:如果实现自动Size(wide, height)

求助:如果实现自动Size(wide, height)

求助:如果实现自动Size(wide, height)
这个图“宽”显示不全,“高”漏出了背景色。。。。

checkBox和 button放在1行3列的tableLayoutPanel1中
tableLayoutPanel1设置为底部停靠。。。。

pictureBox1放在只有一个单元格的tableLayoutPanel2中
tableLayoutPanel2 的Dock设置为FILL

checkBox1、 button1、 button2、pictureBox1的Dock全设置为FILL。
这样,鼠标拖动窗口大小时,每个控件的Piont和Size都会相应的变化。。。。


在截图时,如何适应图片大小自动调整窗口大小。。。


求助:如果实现自动Size(wide, height)

代码中,screenImage 为截取到的图片。。。




上一篇:win32 listview 报表怎样双击进入可编辑
下一篇:TeechartV5怎么在VS2019上的MFC中使用
38_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-6-10 11:27:23 | 显示全部楼层
求助:如果实现自动Size(wide, height)

为什么,都不回答我的问题呀???
再不回答,这个项目就完成了。
就没有机会再回答,这个项目的问题了。
if (screenImage != nullptr)
{
        this->WindowState = FormWindowState::Maximized;
        int swidth = this->Width;
        int sheight = this->Height;
        //默认窗口Size(322, 374)  默认图片框Size(300, 278)
        this->Width = (screenImage->Width + (322 - 300)< swidth) ? screenImage->Width + (322 - 300) : swidth;
        this->Height = (screenImage->Height + (374 - 278)< sheight) ? screenImage->Height + (374 - 278) : sheight;
        this->pictureBox1->Image = screenImage;
}
让窗口自动改变尺寸、防止窗口超出屏幕,已经完成了。。。。
最后问题,尺寸超出,限制窗口尺寸后,如何添加水平/垂直滚动条。。。。
17_avatar_middle
最佳答案
39 
在线会员 发表于 2022-6-10 09:00:21 | 显示全部楼层
本帖最后由 yoobaby 于 2022-6-10 09:03 编辑

这是获取任务栏高度的VC代码,如果你只是想获取工作区高度(屏幕高度 - 去任务栏的高度),

只要取 rt.bottom的值就可以了。

  1.         int screenHeight = GetSystemMetrics(SM_CYSCREEN);
  2.         RECT rt;
  3.         SystemParametersInfo(SPI_GETWORKAREA, 0, &rt, 0);
  4.         int barHeight = screenHeight - rt.bottom;
  5.         cout << barHeight << endl;
复制代码


PS:你怎么不直接用C#就好了。
38_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-6-9 11:54:15 | 显示全部楼层
求助:如果实现自动Size(wide, height)

问题升级:
if (screenImage != nullptr)
{
        //窗口Size(322, 374)  图片框Size(300, 278)
        this->Width = screenImage->Width + (322 - 300);
        this->Height = screenImage->Height + (374 - 278);
        this->pictureBox1->Image = screenImage;
}
以上代码,可以让窗口自动改变尺寸。。。
新的问题就来了,
问题1、如何防止窗口尺寸超出屏幕。

int swidth = Screen::PrimaryScreen->Bounds.Width;
int sheight = Screen::PrimaryScreen->Bounds.Height;

以上代码,可以获取最大显示尺寸。。。
宽可以直接使用,但是高需要减去任务栏的高度,如何获取任务栏的高度。。。。。

问题2、尺寸超过,限制尺寸后如何在窗口上添加,水平/垂直滚动条。。。。
38_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-6-10 11:24:07 | 显示全部楼层
本帖最后由 zmrghy 于 2022-6-10 11:34 编辑
yoobaby 发表于 2022-6-10 09:00
这是获取任务栏高度的VC代码,如果你只是想获取工作区高度(屏幕高度 - 去任务栏的高度),

只要取 rt.b ...


谢谢,提示。
我想到了,另一个办法。。。
请帮我看一下,最后一个问题,添加滚动条。。。



PS:你怎么不直接用C#就好了。


语法习惯问题。。。

::与.
->与.
虽然代码移植成功了很多次了。。。
但是,符号的具体含义,还上一知半解。。。。
17_avatar_middle
最佳答案
39 
在线会员 发表于 2022-6-10 11:54:01 | 显示全部楼层
::xxx    xxx是个全局函数,比如mfc里面也有个xxx函数,你没加::调用的是类的成员函数
->     是对象指针的话,要访问成员方法或成员变量 ,要用->
.        相对应上面的,是对象,就用.访问成员方法或变量

.  在C#里的定义(其实你这种语法用的是.net,也可以说是C#的语法)是个成员访问操作符:访问命令空间的子集命名空间、访问名称空间当中的类型、访问类型的静态成员、访问对象的成员
this->xxx          访问的是对象本身里面的成员xxx

上回的说法不严谨,但这样理解暂时够用了。

38_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-6-10 18:01:32 | 显示全部楼层
yoobaby 发表于 2022-6-10 11:54
::xxx    xxx是个全局函数,比如mfc里面也有个xxx函数,你没加::调用的是类的成员函数
->     是对象指针 ...

C# winform 和 C++ CLR winform 还有 VB winform  都是 .net框架。。。
在三种语言中,使用起来的语法却是不同的。。。。。。。
38_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-6-11 08:21:45 | 显示全部楼层
又见鬼了,当时调试程序时一切正常。保存里第二天打开运行,窗口一直是最大化。
    this->Width = (screenImage->Width + (322 - 300)< swidth) ? screenImage->Width + (322 - 300) : swidth;
    this->Height = (screenImage->Height + (374 - 278)< sheight) ? screenImage->Height + (374 - 278) : sheight;

尺寸的第二次赋值没有任何效果。
需要,取消最大化,并且计算去加载窅口的坐标。。。
TMD,调试好好的,第二天就变了。。。
真TMD是狗改不了吃屎,难缠的小鬼。。。。








private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)
{
        backImage = nullptr;
        extern bool loop;
        loop = false;
        hidden = false;
        if (screenImage != nullptr)
        {
                this->WindowState = FormWindowState::Maximized;  //窗口最大化
                int swidth = this->Width;                //获取窗口最大宽度
                int sheight = this->Height;                //获取窗口最大高度
                int Point_x;                                        //Point_x  Point_y计算加载窗口坐标
                int Point_y;
                this->WindowState = FormWindowState::Normal;  //取消窗口最大化
                //默认窗口Size(322, 374)  默认图片框Size(300, 278)
                if (screenImage->Width + (322 - 300) < swidth)
                {
                        this->Width = screenImage->Width + (322 - 300);
                        Point_x = (swidth - (screenImage->Width + (322 - 300))) / 2;
                }
                else
                {
                        this->Width = swidth;
                        Point_x = 0;
                }
                if(screenImage->Height + (374 - 278) < sheight)
                {
                        this->Height = screenImage->Height + (374 - 278);
                        Point_y = (sheight-(screenImage->Height + (374 - 278)))/2;
                }
                else
                {
                        this->Height = sheight;
                        Point_y = 0;
                }
                this->Location = System::Drawing::Point(Point_x, Point_y);
                this->pictureBox1->Image = screenImage;
        }
}

这次,没问题了。。。
Size没问题,Point没问题。
就差Size超出,限制Size以后。如何添加滚动条了。。。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2022-11-30 11:32

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表