if (IsZoomed(FmMain->Handle))
{
PostMessage(FmMain->Handle, WM_SYSCOMMAND, SC_RESTORE, 0); // 最大化
Label1->Caption = "恢复" + IntToStr(FmMain->Width);
}
else
{
PostMessage(FmMain->Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
Label1->Caption = "最大化" + IntToStr(FmMain->Width);
13 个解决方案
#1
FmMain->Width的值应该还是显示之前的值,你可以把
Label1->Caption = "最大化" + IntToStr(FmMain->Width);
这句放在Form的Resize或是Paint事件里,应该会是正确的值。
Label1->Caption = "最大化" + IntToStr(FmMain->Width);
这句放在Form的Resize或是Paint事件里,应该会是正确的值。
#2
PostMessag => SendMessage结果就会是你要求的。
#3
用sendmessage, 最大化都实现不了了
#4
我如果在一个button里用SendMessage(FmMain->Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)和SendMessage(FmMain->Handle, WM_SYSCOMMAND, SC_RESTORE, 0)则可以最大化和恢复窗口的大小。
但如果我在panel的双击事件里使用,则不响应。。这是为什么啊?
但如果我在panel的双击事件里使用,则不响应。。这是为什么啊?
#5
#6
读取之前加个延迟看看
#7
在panel的双击事件里用SendMessage(FmMain->Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)无法最大化窗口,用postmessage可以最大化,但是获取的窗口的值不正确
但是在button里用SendMessage最大化却又可以
这是为什么阿
但是在button里用SendMessage最大化却又可以
这是为什么阿
#8
自己顶上去!
#9
我试了几个环境双击事件中都无法响应SendMessage跟PostMessage
我不知道你怎么实现的
但是关于你的值不正确的原因我倒是知道一些
PostMessage只是发送消息而已
而SendMessage会知道消息执行完毕之后才会返回,所以你用PostMessage之后马上获取width时窗口实际上还没有改变
其实你可以用其他方法实现你想要的功能,比如说双击后开启一个1ms的定时器,让定时器去执行SendMessage,然后再获取width
有时候道路不仅仅一条,一条走不通还可以走其他路嘛
不过如果你知道了为什么SendMessage在双击事情中无法响应的原因请麻烦告诉我一下,我也很想知道
我不知道你怎么实现的
但是关于你的值不正确的原因我倒是知道一些
PostMessage只是发送消息而已
而SendMessage会知道消息执行完毕之后才会返回,所以你用PostMessage之后马上获取width时窗口实际上还没有改变
其实你可以用其他方法实现你想要的功能,比如说双击后开启一个1ms的定时器,让定时器去执行SendMessage,然后再获取width
有时候道路不仅仅一条,一条走不通还可以走其他路嘛
不过如果你知道了为什么SendMessage在双击事情中无法响应的原因请麻烦告诉我一下,我也很想知道
#10
悲剧了。。。。好多错别字。。。
#11
知音啊!!求在双击事件中SendMessage的办法...................................
#12
不用找M$的Bug在DefWindowProc里,
function DefWindowProc; external user32 name 'DefWindowProcA';
function DefWindowProcA; external user32 name 'DefWindowProcA';
function DefWindowProcW; external user32 name 'DefWindowProcW';
看看VC那边的人有办法没?
function DefWindowProc; external user32 name 'DefWindowProcA';
function DefWindowProcA; external user32 name 'DefWindowProcA';
function DefWindowProcW; external user32 name 'DefWindowProcW';
看看VC那边的人有办法没?
#13
用个替代方法算了
if( IsZoomed(Handle) )
{
//SendMessage( Handle, WM_SYSCOMMAND, SC_RESTORE, 12); // 最大化
this->WindowState = wsNormal;
Caption = "恢复" + IntToStr(Width);
}
else
{
// SendMessage( Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 1);
this->WindowState = wsMaximized;
Caption = "最大化" + IntToStr(Width);
}
#1
FmMain->Width的值应该还是显示之前的值,你可以把
Label1->Caption = "最大化" + IntToStr(FmMain->Width);
这句放在Form的Resize或是Paint事件里,应该会是正确的值。
Label1->Caption = "最大化" + IntToStr(FmMain->Width);
这句放在Form的Resize或是Paint事件里,应该会是正确的值。
#2
PostMessag => SendMessage结果就会是你要求的。
#3
用sendmessage, 最大化都实现不了了
#4
我如果在一个button里用SendMessage(FmMain->Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)和SendMessage(FmMain->Handle, WM_SYSCOMMAND, SC_RESTORE, 0)则可以最大化和恢复窗口的大小。
但如果我在panel的双击事件里使用,则不响应。。这是为什么啊?
但如果我在panel的双击事件里使用,则不响应。。这是为什么啊?
#5
#6
读取之前加个延迟看看
#7
在panel的双击事件里用SendMessage(FmMain->Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)无法最大化窗口,用postmessage可以最大化,但是获取的窗口的值不正确
但是在button里用SendMessage最大化却又可以
这是为什么阿
但是在button里用SendMessage最大化却又可以
这是为什么阿
#8
自己顶上去!
#9
我试了几个环境双击事件中都无法响应SendMessage跟PostMessage
我不知道你怎么实现的
但是关于你的值不正确的原因我倒是知道一些
PostMessage只是发送消息而已
而SendMessage会知道消息执行完毕之后才会返回,所以你用PostMessage之后马上获取width时窗口实际上还没有改变
其实你可以用其他方法实现你想要的功能,比如说双击后开启一个1ms的定时器,让定时器去执行SendMessage,然后再获取width
有时候道路不仅仅一条,一条走不通还可以走其他路嘛
不过如果你知道了为什么SendMessage在双击事情中无法响应的原因请麻烦告诉我一下,我也很想知道
我不知道你怎么实现的
但是关于你的值不正确的原因我倒是知道一些
PostMessage只是发送消息而已
而SendMessage会知道消息执行完毕之后才会返回,所以你用PostMessage之后马上获取width时窗口实际上还没有改变
其实你可以用其他方法实现你想要的功能,比如说双击后开启一个1ms的定时器,让定时器去执行SendMessage,然后再获取width
有时候道路不仅仅一条,一条走不通还可以走其他路嘛
不过如果你知道了为什么SendMessage在双击事情中无法响应的原因请麻烦告诉我一下,我也很想知道
#10
悲剧了。。。。好多错别字。。。
#11
知音啊!!求在双击事件中SendMessage的办法...................................
#12
不用找M$的Bug在DefWindowProc里,
function DefWindowProc; external user32 name 'DefWindowProcA';
function DefWindowProcA; external user32 name 'DefWindowProcA';
function DefWindowProcW; external user32 name 'DefWindowProcW';
看看VC那边的人有办法没?
function DefWindowProc; external user32 name 'DefWindowProcA';
function DefWindowProcA; external user32 name 'DefWindowProcA';
function DefWindowProcW; external user32 name 'DefWindowProcW';
看看VC那边的人有办法没?
#13
用个替代方法算了
if( IsZoomed(Handle) )
{
//SendMessage( Handle, WM_SYSCOMMAND, SC_RESTORE, 12); // 最大化
this->WindowState = wsNormal;
Caption = "恢复" + IntToStr(Width);
}
else
{
// SendMessage( Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 1);
this->WindowState = wsMaximized;
Caption = "最大化" + IntToStr(Width);
}