Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.10;
Скачать: CL | DM;

Вниз

Пример на языке С создание окна, помогите перевести строку   Найти похожие ветки 

 
allucard   (2007-05-16 13:57) [0]

Сабж.

w: переменная типа WNDCLASS;

1.memset(&w,0,sizeof(WNDCLASS));
2.w.hbrBackground = GetStockBrush(WHITE_BRUSH);
3.RegisterClass(&w);

4. while(GetMessage(&msg,NULL,0,0))
{
 TranslateMessage(&msg);
 DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
if (Message == WM_DESTROY )
{
 PostQuitMessage(0);
 return 0;
}
return DefWindowProc(hwnd,Message,wparam,lparam);
}


Спасибо.


 
clickmaker ©   (2007-05-16 14:13) [1]

=  =>  :=
&  =>  @ (если функция продекларирована с аргументом-указателем, а не var)
==  =>  =
{   => begin
}   => end;
return  => Result :=


 
Anatoly Podgoretsky ©   (2007-05-16 14:17) [2]

> clickmaker  (16.05.2007 14:13:01)  [1]

> return  => Result :=

return  => Result := ...; Exit; ?


 
allucard   (2007-05-16 14:18) [3]


> clickmaker ©   (16.05.07 14:13) [1]

Понял.

но функции memset нет в Delphi, какой аналог?


 
clickmaker ©   (2007-05-16 14:38) [4]


> какой аналог?

FillChar, ZeroMemory


 
allucard   (2007-05-16 15:05) [5]

Как это интерпретировать:

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);

LRESULT CALLBACK WndProc(HWND:hwnd, UINT:Message, WPARAM:wparam, LPARAM:lparam);
begin
   if (Message = WM_DESTROY) then
     begin
       PostQuitMessage(0);
       Result := 0;
     end;
 Result := DefWindowProc(hwnd,Message,wparam,lparam);
end;


не могу интерпретировать только описание процедуры?


 
stakan ©   (2007-05-16 15:42) [6]


> Как это интерпретировать:
>
> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
>
> LRESULT CALLBACK WndProc(HWND:hwnd, UINT:Message, WPARAM:
> wparam, LPARAM:lparam);
> begin
>    if (Message = WM_DESTROY) then
>      begin
>        PostQuitMessage(0);
>        Result := 0;
>      end;
>  Result := DefWindowProc(hwnd,Message,wparam,lparam);
> end;
>


function WndProc(hwnd: HWND; Message: UINT; wparam: WPARAM; lparam: LPARAM): LRESULT;
begin
 if (Message = WM_DESTROY) then
 begin
   PostQuitMessage(0);
   Result := 0;
   Exit;
 end;
 Result := DefWindowProc(hwnd, Message, wparam, lparam);
end;


 
allucard   (2007-05-16 16:11) [7]

Просто функция???

Всем спасибо.


 
clickmaker ©   (2007-05-16 16:23) [8]


> [7] allucard   (16.05.07 16:11)
> Просто функция???

function WndProc(hwnd: HWND; Message: UINT; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;


 
allucard   (2007-05-17 08:37) [9]

В подчёркнутой строке Variable required, почему?

 function WndProc(hwnd: HWND; Message: UINT; wparam: WPARAM; lparam: LPARAM): LRESULT;  stdcall;

function WndProc(hwnd: HWND; Message: UINT; wparam: WPARAM; lparam: LPARAM): LRESULT;    stdcall;
begin
if (Message = WM_DESTROY) then
begin
  PostQuitMessage(0);
  Result := 0;
  Exit;
end;
Result := DefWindowProc(hwnd, Message, wparam, lparam);
end;


procedure TForm2.Button5Click(Sender: TObject);
Var
H: HWND;
M: MSG;
W: WNDCLASS;
begin
ZeroMemory(@W, SizeOf(WNDCLASS));
W.style := CS_HREDRAW or CS_VREDRAW;

W.lpfnWndProc := @WndProc;

end;


 
allucard   (2007-05-17 09:09) [10]

Разобрался, WndProc оказывается есть у класса TCustomForm.
Просто поменял имя - работает.


 
allucard   (2007-05-17 09:12) [11]

Какой аналог на дельфи функции

GetStockBrush(WHITE_BRUSH);

Полная строка w.hbrBackground = GetStockBrush(WHITE_BRUSH);

?


 
clickmaker ©   (2007-05-17 09:30) [12]


> аналог на дельфи функции

это макрос
GetStockObject()


 
allucard   (2007-05-17 15:39) [13]

Ок. Всё пошло.

Только RegisterClass(@w); вызывает Access Violation.

Наверное эти функции в С и Дельфи отличаются?
Какой может быть выход?


 
Сергей М. ©   (2007-05-17 16:22) [14]


> Какой может быть выход?


Выход один - учить Паскаль.

Если w - это WNDCLASS, то никаких "баранов"-префиксов перед этим параметром быть не должно.


 
allucard   (2007-05-18 08:56) [15]


> Сергей М. ©   (17.05.07 16:22) [14]

)))
Incompatible types: "TPersistentClass" and "tagWNDCLASSA"


 
allucard   (2007-05-21 08:19) [16]

Народ, подскажите как класс зарегить?

w типа WNDCLASS;

а RegisterClass(w); вызывает ошибку Incompatible types: "TPersistentClass" and "tagWNDCLASSA".

Спасибо.


 
Сергей М. ©   (2007-05-21 09:17) [17]


> allucard   (18.05.07 08:56) [15]


Windows.RegisterClass(..);

Учи Паскаль.



Страницы: 1 вся ветка

Текущий архив: 2007.06.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
2-1179588723
Xamil
2007-05-19 19:32
2007.06.10
Плз, подскажите по opengl


15-1178838214
ArtemESC
2007-05-11 03:03
2007.06.10
"Крепкий" носитель


2-1179498674
Saposo
2007-05-18 18:31
2007.06.10
Проблемы с отображением шрифтов


15-1179297538
IMHO
2007-05-16 10:38
2007.06.10
Сегодня - финал Кубка УЕФА!


2-1179420759
Romm
2007-05-17 20:52
2007.06.10
Курсор в Memo