关于窗体刷新的问题

yansea 2003-04-24 02:21:29
让我从头说起,问题是这样的。
我从其他程序中导出了一个对话框文件,是二进制格式。然后用GreateDialogIndirectParam
将其显示出来。不过这个对话框不是可见的,我又用SetWindowLong给它加上了WS_VISIBLE风格。
现在问题来了,对话框是能够显示出来,可是在显示出来的时候不会刷新,样子很难看。
并且无论我用SendMessage,ShowWindow,UpdateWindow等都不好使,只有用别的程序将它覆盖掉,或者把程序最小化再还原,它才能够正常起来。
另外我传递的窗口函数只是处理了WM_CLOSE,并且无论我处理WM_PAINT与否它都没有什么反应。
希望大家给点帮助。

窗口过程如下:
var
ps : TPaintStruct;
begin
if uMsg = WM_PAINT then
begin
BeginPaint(h,ps);
EndPaint(h,ps);
Result := true;
end
else
if uMsg = WM_CLOSE then
begin
DestroyWindow(h);
Result := true;
end else
begin
DefWindowProc(h,uMsg,wParam,lParam);
Result := false;
end;
end;
...全文
50 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shadowfish 2003-04-24
  • 打赏
  • 举报
回复
学习……
yansea 2003-04-24
  • 打赏
  • 举报
回复
哦,是的,的确只刷新了一部分,再试试
l_xiaofeng 2003-04-24
  • 打赏
  • 举报
回复
InvalidateRect(h,nil,true);
SendMessage(h,WM_NCPAINT,1,0);
sysu 2003-04-24
  • 打赏
  • 举报
回复
放在ShowWindow之后呢?
yansea 2003-04-24
  • 打赏
  • 举报
回复
无论写到窗口过程内,还是在窗体创建后调用都不好使。
仍然像以前一样。
sysu 2003-04-24
  • 打赏
  • 举报
回复
直接这样试试:InvalidateRect(hwnd, nil, true); // nil表示整个区域
sysu 2003-04-24
  • 打赏
  • 举报
回复
试试用InvalidateRect:
GetWindowRect(hwnd, rect);
InvalidateRect(hwnd, rect, true);

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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