Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];
ВнизМерцание окна при изменение размеров Найти похожие ветки
← →
demon © (2008-08-07 01:12) [0]Окно сильно мерцает при изменении размеров, на окне listbox, его размеры изменял так:
function WindowProc( .....
......
WM_SIZE :
MoveWindow(HListBox, 0, 0, LOWORD(lparam)-16, HIWORD(lparam)-50, true);
Из-за чего это может быть?
← →
{RASkov} © (2008-08-07 01:20) [1]> [0] demon © (07.08.08 01:12)
WM_SIZE приходит после изменения размеров, а затем опять смена.... Есть WM_SIZING...
← →
demon © (2008-08-07 01:28) [2]
> Есть WM_SIZING...
Тогда вообще listbox закрашиваеться цветом фона.
← →
{RASkov} © (2008-08-07 11:32) [3]Попробуй вопрос более менее попонятнее сформулировать...
Я что-то не совсем верно понял, поэтому в [1] возможно бред написал...
← →
demon © (2008-08-07 12:04) [4]Вроде сделал нормально сам.
Переформулирую: есть окно, на этом окне компонент ListBox, всё саздано через API. Нужно чтобы при изменении размеров окна, ListBox тоже менял свои размеры, поэтому при событии от окна WM_SIZE я менял размеры ListBox.
Но при изменении размеров ListBox мерцает. Вот и хотел узнать как от этого избавиться.
← →
Darkmoon (2008-08-07 12:24) [5]поставь параметр doublebuffed:=true в листбоксе и не мудись)
← →
DVM © (2008-08-07 12:43) [6]
> Darkmoon
> есть окно, на этом окне компонент ListBox, всё саздано через
> API
← →
Slym © (2008-08-07 12:50) [7]2Darkmoon (07.08.08 12:24) [5]
demon © (07.08.08 12:04) [4]всё саздано через API
а через SetWindowPos не пробывал?SetWindowPos(HListBox,0,0,0,LOWORD(lparam)-16, HIWORD(lparam)-50,SWP_NOZORDER or SWP_NOACTIVATE or SWP_NOMOVE);
← →
DVM © (2008-08-07 13:06) [8]
> demon © (07.08.08 01:12)
> Из-за чего это может быть?
Из двойного стирания фона сначала для родительского окна потом для дочернего. Возможно поможет WS_CLIPCHILDREN
← →
DVM © (2008-08-07 13:22) [9]Вот на скорую руку набросал (нет проверки возвращаемых значений и проч.), не мерцает ничего:
program test;
uses
windows, messages;
var
wc: TWndClassEx;
MainWnd: HWND;
ListBoxWnd: HWND;
Mesg: TMsg;
//------------------------------------------------------------------------------
function WindowProc(Wnd: HWND; Msg: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
case msg of
wm_create:
begin
ListBoxWnd := CreateWindow("LISTBOX", "",
WS_VISIBLE or WS_CHILD,
0, 0, 0, 0, Wnd, 0, 0, nil);
end;
wm_destroy :
begin
PostQuitMessage(0);
Result := 0;
exit;
end;
WM_SIZE :
begin
MoveWindow(ListBoxWnd, 0, 0, LOWORD(lparam)-10, HIWORD(lparam)-10, true);
Result := 0;
end;
else
Result := DefWindowProc(Wnd, Msg, wParam, lParam);
end;
end;
//------------------------------------------------------------------------------
var
xPos, yPos, nWidth, nHeight: integer;
begin
wc.cbSize:=sizeof(wc);
wc.style:=cs_hredraw or cs_vredraw;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:="WndClass1";
RegisterClassEx(wc);
xPos := 100;
yPos := 150;
nWidth := 400;
nHeight := 250;
MainWnd := CreateWindowEx(0, "WndClass1", "Caption", ws_overlappedwindow or WS_CLIPCHILDREN,
xPos, yPos, nWidth, nHeight, 0, 0, Hinstance, nil);
ShowWindow(MainWnd,CmdShow);
while GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c