Главная страница
    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.48 MB
Время: 0.042 c
15-1179179108
PHPdeveloper
2007-05-15 01:45
2007.06.10
FF и js


2-1179413482
Qazxswedc1
2007-05-17 18:51
2007.06.10
поиск файлов на локальном диске


2-1179799348
unnamed777
2007-05-22 06:02
2007.06.10
как убить процесс??


15-1179109292
Slider007
2007-05-14 06:21
2007.06.10
С днем рождения ! 13 мая


15-1179251769
VirEx
2007-05-15 21:56
2007.06.10
I, robot.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский