Главная страница
    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.077 c
2-1179481989
LoRd1
2007-05-18 13:53
2007.06.10
Завершение работы (удаление) приложения


15-1179005630
lookin
2007-05-13 01:33
2007.06.10
Терминологический вопрос про массив...


15-1179175926
raqy.style
2007-05-15 00:52
2007.06.10
Протокол с нулевой передачей информации


3-1174484710
Dmitry_177
2007-03-21 16:45
2007.06.10
DbiQExecDirect из BDE API (IDAPI) не выполняет SQL-запрос


2-1179483933
News
2007-05-18 14:25
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский