Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.036 c
15-1178981335
ArtemESC
2007-05-12 18:48
2007.06.10
Benny Hill


15-1179214417
iXT
2007-05-15 11:33
2007.06.10
Delphi 10 or TD (TMemo)


1-1176453553
Deniz
2007-04-13 12:39
2007.06.10
Подскажите компонент похожий на ehLib


2-1179526975
Heart_Beat
2007-05-19 02:22
2007.06.10
HELP!


2-1179832675
Бергамот
2007-05-22 15:17
2007.06.10
Запись структуры в файл





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский