小问题,如何改变窗口的这种属性??

summernightrain 2001-04-17 07:36:00
在win98第二版中,
情况1:如果你不在显示属性的效果选项框中选中"拖动窗口时显示其内容",一般的窗口
在拖动时是这样的:先将鼠标点击到标题栏上,按住不动后进行拖动,这时你看到拖动的是一个框,而不是这个窗口.当你松开鼠标时,该窗口才移到这个框的位置.
情况2:如果你在显示属性的效果选项框中选中"拖动窗口时显示其内容",那么就变成了拖动时是拖动整个窗口了.

但是,winamp这个软件完全不受这个设置的左右.不管是在情况1,还是在情况2中,它的主窗口都表现为拖动时看到的是拖动整个窗口.

我想请问大家,怎样用编程的方法实现这样的窗口?
注明:不是改注册表什么的,而是要让自己指定的窗口变成这样,就是和Winamp一样,不受设置的影响.
...全文
223 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kingron 2001-04-18
  • 打赏
  • 举报
回复
我的方法可以做到,不过窗口边缘有一个虚框!
Fancy 2001-04-17
  • 打赏
  • 举报
回复
在窗体中放一个ApplicationEvents控件,在它的OnMessage事件中

//pt,IsDown为全局变量

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
P: TPoint;
R: TRect;
begin
if (msg.message = WM_NCMOUSEMOVE) or (msg.message = WM_MOUSEMOVE) then
begin
if IsDown then
begin
GetCursorPos(p);
SetBounds(p.x - pt.x, p.y - pt.y, Width, Height);
GetWindowRect(Handle, r);
ClipCursor(@r);
end;
end else if (msg.message = WM_NCLBUTTONDOWN) then
begin
if msg.wParam = HTCAPTION then
begin
IsDown := True;
GetCursorPos(pt);
pt.x := pt.x - Left;
pt.y := pt.y - Top;
Handled := True;
GetWindowRect(Handle, r);
ClipCursor(@r);
end;
end else if (msg.message = WM_NCLBUTTONUP) or (msg.message = WM_LBUTTONUP) then
begin
IsDown := False;
ClipCursor(nil);
end;
end;

以上方法可以实现,但是不够完美,可供参考!
rh 2001-04-17
  • 打赏
  • 举报
回复
贴出来看看先?!
xixi~~repaint当然不可以了,慢得很:)
summernightrain 2001-04-17
  • 打赏
  • 举报
回复
呵呵,是不是被打击,不好意思!!

repaint不行!

Kingron(WinAPI)的方法也不行!

总之都达不到预期的效果!!不过小弟已经找到一个控件可以实现,可以研究一下它的代码!!
summernightrain 2001-04-17
  • 打赏
  • 举报
回复
我试了一下,大家的方法都可以用两个字来形容!

失败!
rh 2001-04-17
  • 打赏
  • 举报
回复
呵呵,我直接repaint算了咯~~省得代码难得敲
Kingron 2001-04-17
  • 打赏
  • 举报
回复
不过我测试了一下,闪烁比较厉害,比Winamp还闪烁一些,可能应该还要优化一下。
Kingron 2001-04-17
  • 打赏
  • 举报
回复
procedure TForm1.wmmove(var msg: tmessage);message wm_moving
var
p:^trect;
begin
p:=pointer(msg.lParam);
left:=p^.Left;
top:=p^.Top;
msg.Result:=integer(true);
msg.Result:=1;
SetWindowPos(handle,HWND_TOP ,p^.Left,p^.Top,p^.Right-p^.Left,p^.Bottom-p^.Top,SWP_SHOWWINDOW );
inherited;
end;
sundayboys 2001-04-17
  • 打赏
  • 举报
回复
实现在移动窗口时,显示的是窗口而非虚框
在Windows系统中,需要在移动窗口时显示窗口和虚框,可以调用Windows API函数实现:
SystemParametersInfo(SPI_GETDRAGFULLWINDOWS,TRUE,NULL,0);
summernightrain 2001-04-17
  • 打赏
  • 举报
回复
To rh:
我知道你说的方法的原理,而且也部分试验过.
请给出你的截获窗体移动消息及自画本身的代码,好吗?
我想你的这种方法也许可行,但是可能会有闪烁.




rh 2001-04-17
  • 打赏
  • 举报
回复
最笨的方法
截获窗体的移动消息
在其中自画本身!
sundayboys 2001-04-17
  • 打赏
  • 举报
回复
哎,看糊涂了,到底想怎么样啊?

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧