Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2011, 17:38   #1
ANtonP
 
Регистрация: 16.12.2010
Сообщений: 6
По умолчанию Работа с не клиентской областью окна в WinApi

В проге представленно рисование на не клиентской области окна,но когда окно становится не активным,то цвет кисти исчезает.Как сделать,чтобы окно всегда оставалось зеленым?
program Win1;

uses
Windows,
Messages,
SysUtils;

var
WndClass: TWndClass;
szAppName: PChar;
WinHandle: HWnd;
Msg: TMsg;
I, J: Integer;
Cnt: integer;

function MyWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall;
var
Brush: HBrush;
R, R2, R1,R3: TRect;
ps: TPaintStruct;
Context: HDC;
Font: HFont;
PR: PRect;
Pen:HPen;
begin
case Msg of

WM_PAINT:
begin
Context := GetDC(hWnd);
try
Inc(Cnt);
GetClientRect(hWnd, R);
Brush := CreateSolidBrush($0cb520);
SelectObject(Context, Brush);
try
Rectangle(Context,R.Left,R.Top,R.Ri ght,R.Bottom);
finally
DeleteObject(Brush);
end;
Font := CreateFont(0, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH, 'Monotype Corsiva');
Brush := CreateHatchBrush(HS_DIAGCROSS ,$7f0cb5);
SelectObject(Context, Brush);
SelectObject(Context, Font);
try
R1.left := i - 100;
R1.top := 10;
R1.right := i - 100 + 150;
R1.bottom := 45;
R2.left := i - 100 + {1280} R.Right - R.Left;
R2.top := 10;
R2.right := i - 100 + 150 + {1280} R.Right - R.Left;
R2.bottom := 45;
Randomize;

DrawText(Context, 'Hello, Windows! =)', -1, R1,
DT_SINGLELINE or DT_CENTER or DT_VCENTER);
DrawText(Context, 'Hello, Windows! =)', -1, R2,
DT_SINGLELINE or DT_CENTER or DT_VCENTER);
// end
// else i :=0
ValidateRect(hwnd, @R);
finally
DeleteObject(Font);
DeleteObject(Brush);
end;
finally
ReleaseDC(hWnd, Context);
Result := 0;
end;
end;

WM_TIMER:
begin
GetClientRect(hWnd, R);
if i < {1220} R.Right - R.Left then
Inc(I, 20)
else i := 0;
InvalidateRect(hWnd, nil, True);
end;

WM_NCPAINT:
begin
GetWindowRect(hwnd,R3);
DefWindowProc(hwnd, msg, wParam, lParam);
Context:=GetWindowDC(hwnd);
try
Pen:=CreatePen(PS_SOLID,2024,$0cb52 0);
SelectObject(context,Pen);
MoveToEx(Context,0,0,nil);
LineTo(Context,r3.right,0);
SelectObject(Context,GetStockObject (NULL_PEN));
ReleaseDC(hwnd,Context);
result:=0
finally
DeleteObject(Pen);
end;
end;
WM_SIZING:
begin
PR := pointer(lParam);
// Dec(PR.Top);
if PR.Right - PR.Left < 400 then
PR.Right := PR.Left + 400;
if Pr.Bottom - PR.Top < 100 then
Pr.Bottom := PR.Top + 100;
Result := 0;
end;

WM_DESTROY:
begin
PostQuitMessage(0);
Result := 0;
end;
else
Result := DefWindowProc(hWnd, Msg, wParam, lParam);
end;
end;

begin
szAppName := 'Hello win';
Cnt := 0;

WndClass.Style := CS_HREDRAW or CS_VREDRAW;
WndClass.lpfnWndProc := @MyWndProc;
WndClass.cbClsExtra := 0;
WndClass.cbWndExtra := 0;
WndClass.hInstance := HInstance;
WndClass.hIcon := LoadIcon(HInstance,IDI_APPLICATION) ;
WndClass.hCursor := LoadCursor(HInstance,IDC_ARROW);
WndClass.hbrBackground := GetStockObject(White_BRUSH);
WndClass.lpszMenuName := nil;
WndClass.lpszClassName := szAppname;

RegisterClass(WndClass);

WinHandle := CreateWindow(WndClass.lpszClassName , // window class name
'The Hello Program', // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
1280, // initial x size
720, // initial y size
0, // parent window handle
0, // window menu handle
HInstance, // program instance handle
nil); // creation parameters

I := 0;
J := 0;
SetTimer(WinHandle, 1, 200, nil);

ShowWindow(WinHandle, SW_SHOW);
UpdateWindow(WinHandle);


while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;

end.
ANtonP вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перерисовка/обновление клиентской области окна ImmortalAlexSan Общие вопросы Delphi 0 09.01.2011 16:19
Установить размер клиентской обл. окна Ulex Win Api 0 12.04.2010 01:47
Как узнать размер клиентской части окна? Belfigor Общие вопросы Delphi 4 03.03.2010 13:00
как растянуть див на всю высоту клиентской части окна браузера Anopsa - Anna HTML и CSS 3 21.09.2009 10:07
Прозрачность в клиентской части окна. Ivan_32 Win Api 2 06.02.2009 15:53