让我从头说起,问题是这样的。
我从其他程序中导出了一个对话框文件,是二进制格式。然后用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;
我从其他程序中导出了一个对话框文件,是二进制格式。然后用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;
GetWindowRect(hwnd, rect);
InvalidateRect(hwnd, rect, true);
SendMessage(h,WM_NCPAINT,1,0);