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

Вниз

Каа-то странно реагирует минимальное Win32приложение на сообщения   Найти похожие ветки 

 
Николай Быков   (2002-12-30 20:38) [0]

вот здесь исходниики http://freeprogrammer.narod.ru
Приложение вроде бы нормально реагирует на сообщения, реакцию на которые я написал, но вот на сообщения типа WM_SYSCOMMAND WM_CLOSE чего-то вообще никак не хочет.
Подскажит где ошибоска.
RTFM посылать не надо, я и так этот пример из книги Ch.Petzold"a "Windows Programming" взял


 
Николай Быков   (2002-12-30 20:52) [1]

тфу ты елки палки забыл дописать
http://freeprogrammer.narod.ru/1.html


 
Cobalt   (2002-12-31 01:56) [2]

Как проверяешь посылку сообщений?
Попробуй перехватывать соответствующие команды, выводить окошко, и передавать управление DefWindowProc


 
Николай Быков   (2002-12-31 08:32) [3]


> Cobalt © (31.12.02 01:56)

Я же тебе исходники вывесил. Там все написанно :-)


 
Николай Быков   (2002-12-31 08:33) [4]

Да еще.
Почему-то там playsound не играется при создании :confused:


 
Evgeny   (2002-12-31 09:13) [5]

Посмотреть какая программа взята за исходник не получилось. данная ссылка http://freeprogrammer.narod.ru не работает.


 
Darts   (2002-12-31 10:57) [6]

1. Не указан хедер
2. Сообщения - WM_SYSCOMMAND, WM_CLOSE - их нет
3. Насчет PlaySound c:\windows\media\tada.wav - возможно, неверно указан путь к файлу.


 
Cobalt   (2002-12-31 13:30) [7]


> но вот на сообщения типа WM_SYSCOMMAND WM_CLOSE чего-то
> вообще никак не хочет.

Еще раз: как проверяешь реакцию?
Ты, не объясняй, ты рукой покажи... ;-)

> #include

Как он у тебя скомпилировался так? разве так можно оставлять директивы?


 
Николай Быков   (2002-12-31 16:25) [8]

так там написанно #include <windows.h> (подумайте теперь почему вы не это видите)

> Darts (31.12.02 10:57)

Путь указан правильно

> Cobalt © (31.12.02 13:30)

return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

Показал пальцем? Там вообще-то это было написанно


 
Cobalt   (2002-12-31 18:20) [9]

Взглянул бы сам на ссылку?
Опера 6.04, ИЕ 6.0, Мозилла 1.0 - ни в одном из этих браузеров не видно!
Дал бы простое расширение, тхт, например.
Насчет WM_Close - не закрывается окно, что ли? Так бы и сказал. Но опять же, как ТЫ посылаешь окну эти сообщения?
Совершенно непонятно, какие ошибки...


 
Cobalt   (2002-12-31 18:48) [10]

Да, кстати, если я не ошибаюсь, то в С надо путь разделять двойным слэшем. (правильно?)


 
Rouse_   (2002-12-31 18:59) [11]

Да люди, что вы запариваетесь, вчера было все обьяснено по асе, почти этот же код был дан на Д как обьяснение, я предложил даже перевести на Д разбираемый код, но у автора с этим трудности. Т.е. или С++ или Дельфи (причем не VC++). Я отступил от обьяснений из-за, на данный момент, плохого уровня знаний автора.

Желаю успехов в новом году


 
Diamond Cat   (2002-12-31 19:52) [12]

а не пробовал определить wndclass.lpszMenuName = NULL; ? это раз и два, если не определил то сам обрабатывай эти сообщения


 
Николай Быков   (2002-12-31 23:14) [13]


> Diamond Cat © (31.12.02 19:52)

А там же вроде бы как написанно
wndclass.lpszMenuName = NULL;


 
Rouse_   (2002-12-31 23:38) [14]

Ув. Николай, ты помнишь что я тебе вчера посоветовал? Там было решение твоей проблемы, пройдись по архиву нашей беседы и внимательно вчитайся в текст.

Желаю успехов в новом году


 
Николай Быков   (2003-01-01 01:20) [15]


> Rouse_ © (31.12.02 23:38)

Я говорю, что мне конкретно к этому примеру надо, а не перевод чего-то куда-то.
ЗЫ
И тебе удчи :-)


 
Diamond Cat   (2003-01-01 20:11) [16]


> Николай Быков

извини не корректно написал, я имел в виду что надо как раз не ноль


 
Evgeny   (2003-01-02 08:29) [17]

Может тебя вот это устроит?


program Hello;

uses
Windows, Messages, MMSystem;

const
szAppName = "HelloWin";

var
Window : HWND;
Msg : TMSG;
WndClass : WNDCLASSEX;

//===============

function WndProc(Wnd : HWND; iMsg, wParam, lParam : Longint): Longint; stdcall;
var
DC : HDC;
ps : TPaintStruct;
aRect : TRect;
begin
case iMsg of
// будет играть только в случае нахождения файла
WM_CREATE:
begin
if not PlaySound("c:\windows\media\tada.wav", 0, SND_FILENAME or SND_ASYNC) then
begin
// обработаем ошибку
end;
end;

WM_SYSCOMMAND:
case wParam of
SC_CLOSE :
begin
SendMessage(Wnd, WM_KEYDOWN, VK_ESCAPE, 0);
if MessageBox(Wnd, "You certain that want to close program", "Warning", MB_OKCANCEL) = ID_OK then
SendMessage(Wnd, WM_CLOSE, 0, 0);
Result := 0;
Exit;
end;
end;

WM_PAINT:
begin
DC := BeginPaint(Wnd, ps);
GetClientRect(Wnd, aRect);
DrawText(DC, "Hello Windows 95", -1, aRect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
EndPaint(Wnd, ps);
end;

WM_COMMAND:
case LOWORD(wParam) of
100: SendMessage(Wnd, WM_CLOSE, 0, 0);
end;

WM_DESTROY: PostQuitMessage(0);
end;
Result := DefWindowProc(Wnd, iMsg, wParam, lParam);
end;

//==========

function WinMain : Integer;
begin
wndclass.cbSize := sizeof(WndClass);
wndclass.style := CS_HREDRAW or CS_VREDRAW;
wndclass.lpfnWndProc := @WndProc;
wndclass.cbClsExtra := 0;
wndclass.cbWndExtra := 0;
wndclass.hInstance := hInstance;
wndclass.hIcon := LoadIcon(0, IDI_APPLICATION);
wndclass.hCursor := LoadCursor(0, IDC_ARROW);
wndclass.hbrBackground := GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName := "";
wndclass.lpszClassName := szAppName;
wndclass.hIconSm := LoadIcon(0, IDI_APPLICATION);

RegisterClassEx(wndclass);

Window := CreateWindow(szAppName, "The Hello Programm",
WS_OVERLAPPEDWINDOW,
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0,
0,
hInstance,
NIL);


CreateWindow("button", "Close",
ws_visible or ws_child,
50, 10, 75, 25,
Window,
100,
hInstance,
NIL);

ShowWindow(Window, CmdShow);
UpdateWindow(Window);

while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Result := Msg.wParam;
end;


begin
WinMain;
end.



 
Николай Быков   (2003-01-02 08:44) [18]

Ну что вы?
Объясняю полностью ситуацию.
Я читаю книгу по WinAPI от Ч.Петзольда.
В книге все примеры и т.д. и т.п. идет на Си.
Я решил, что может быть множество нестыковок, если я буду читать книгу с примерами на Си, а делать эти упражнения на, скажем, Делфи. Скачал себе специально по такому поводу Си-шный компилятор. Начал читать книгу и вот незадача: первый же пример в ней у меня кончено скомпилировался, но программа никак не реагирует на попытки моей мышки свернуть/развернуть/закрыть/изменить_размер окна.
Я привел тот самый исходник на Си (см. ссылку выше) и прошу сказать где там нужно что-то исправить, чтобы вышеупомянутые действия можно было совершть с моим окном, но прошу указать это не исходником на, скажем, Делфи, а исходником (и т.п.)на Си.
Буду блогадарен, если поймут :-)


 
Evgeny   (2003-01-02 09:19) [19]

В том исходнике ошибок нет. А Паскаль нет так уж далеко по синтаксису от С, особенно если это программа на WinAPI. Если обратишь внимание - это именно пример с указанной тобой страницы.
Я скачал его и произвел изменения для работы в Паскале, так же добавил два сообщения: WM_COMMAND и WM_SYSCOMMAND - ты же писал, что у тебя они не работают. Добавил кнопку для демонстрации сообщения WM_CLOSE. Скомпили его и проверь все действия.
Если в том исходнике ты не убрал или не изменил параметры при создании главного окна (WS_OVERLAPPEDWINDOW), то изменение размера происходит без проблем. Чтобы программа не закрывалась по нажатию мышки - нужно специально постараться (пример я описал).


 
Evgeny   (2003-01-02 09:28) [20]

Соврал малость. Одна ошибка в том примере есть конечно же.

Имеется:
#include
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

Должно быть:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);


 
Николай Быков   (2003-01-03 04:26) [21]


> Evgeny © (02.01.03 09:28)

Там так и написанно (прочитай всю ветку)



> Evgeny © (02.01.03 09:19)

1)я спрашивал где в исходнике на Си ошибка
2)я что ли каждый раз буду перевод с Си на Паскаль спрашивать? И ждать по неделе пока ответят? Я поэтому и хочу именно на Си начать все делать.
3)Я говорил, что полученное окно почему-то не сворачивается/разворачивается/закрывается/изменяет_размер.
Вот я и спрашиваю где что надо в исхожнике на Си исправить, чтобы это окно могло сворачивается/разворачивается/закрывается/изменяет_размер
Имеется ввиду, что я не чем-то посылаю эти сообщения, а мышкой тыкаю на кнопки "Свернуть" "Развернуть" "Закрыть" и мышкой же пробую изменить размер. Так вот это у меня не получается, т.к. окно вообще никак не реагирует на такие действия. А почему это так я понять не могу, т.к. вроде бы один в один с твоим примером + пример из книги.

Повторяю: МОЯ ПРОСЬБА ЗАКЛЮЧАЛАСЬ В ТОМ, ЧТОБЫ МНЕ ПОКАЗАЛИ ГДЕ ИМЕННО В ИСХОДНИКЕ НА СИ ДОПУЩЕНА ОШИБКА, ЧТО ОКНО НИЧЕГО НЕ ДЕЛАЕТ ПРИ ВЫШЕУКАЗАННЫХ ДЙЕЙСТВИЯХ, ХОТЯ ДОЛЖНО


 
Polevi   (2003-01-04 11:37) [22]

повтори еще разок


 
Darts   (2003-01-04 11:45) [23]

> Николай Быков © (02.01.03 08:44)

И какой у тебя сишный компилятор?


 
Николай Быков   (2003-01-04 14:23) [24]


> Darts (04.01.03 11:45)

Borland C/C++ Free compiler. (только я так и не разобрался с параметрами коммандной строки для него. То есть он мне ехе делает, но винда его за ехе не принимает)
я пробовал компилировать это на Borland C++ 5.02 .
там создается усе как надо, только окно не реагирует ни на (ну я там выше уже сказал).

Еще одно подтверждение тому, что лучше мне на Си все делать:
Первый пример мне показал Евгений - хорошо.
Следующий же пример опять мне должен кто-нибудь перевести, т.к. там две ф-ции Си аналог которых скорее всего существует в Паскале, но скорее всего под другим именем, т.к. пож этим я его не нашел.
+ Там испоьзуются какие-то странные символы, коотрые мне опять же кто-то должен перевести на Паскаль, но т.к. этим никто заниматься не будет да и мне по неделе каждый перевод ждать неинтересно, то я хочу именно на Си писать


 
Shadow   (2003-01-04 14:27) [25]

>странные символы
%))))))


 
Darts   (2003-01-04 15:14) [26]

Приведи эти так называемык странные символы. Хочу посмотреть. Жутко интересно.

> Николай Быков © (04.01.03 14:23)
> Borland C/C++ Free compiler. (только я так и не разобрался с параметрами коммандной строки для него. То есть он мне ехе делает, но винда его за ехе не принимает)

1. bcc /help или bcc /? пробовал? Должен выдасть все команды.
2. Смотри заголовок получившегося экзешника. Он должен быть в формате PE.


 
Ketmar   (2003-01-04 16:13) [27]

мда. я опять неплохо повеселился. Коленька, вы не думали, что для того, чтобы писать на це, его надо сначала выучить, а? или вы вообще думать не умеете (что, кажется, вполне вероятно)?

Satanas Nobiscum! 04-Jan-XXXVIII A.S.


 
Evgeny   (2003-01-05 06:38) [28]

>Николай Быков © (03.01.03 04:26)

Тебе русским языком сказано, что пример рабочий. Это значит - что скомпилированный пример работает так как ему и положено. Изменяются размеры, производится сворачивание, разворачивание, таскание по столу - что еще? Кстати компилировал я используя bcc32 версии 5.0 от 1996 года из комплекта Borland C++ 5.0, как понимаешь далеко не первой свежести. Может все таки хелп почитать? Кстати оригинал этого файла, без указанной мной ошибки лежит на сайте: WWW.CODEMANUAL.COM/c_and_cpp/samples/csamples.zip
внутри имеется файл hellowin.c так вот это он и есть. Помимо того там имеется огромное количество других примеров. Разбираешь то, что написали другие люди, разбавляешь это чтением документации (хотя бы хелпа) и многие вопросы отпадут сами собой. Хотя бы о странных символах.

А вот тебе полностью указанный мною файл:


Evgeny.

/*--------------------------------------------------------
HELLOWIN.C -- Displays "Hello, Windows" in client area
(c) Charles Petzold, 1990
--------------------------------------------------------*/

#include <windows.h>

long FAR PASCAL WndProc (HWND, WORD, WORD, LONG) ;

int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
static char szAppName[] = "HelloWin" ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;

if (!hPrevInstance)
{
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;

RegisterClass (&wndclass) ;
}

hwnd = CreateWindow (szAppName, // window class name
"The Hello Program", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters

ShowWindow (hwnd, nCmdShow) ;
UpdateWindow (hwnd) ;

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

long FAR PASCAL WndProc (HWND hwnd, WORD message, WORD wParam, LONG lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;

switch (message)
{
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;

DrawText (hdc, "Hello, Windows!", -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}

return DefWindowProc (hwnd, message, wParam, lParam) ;
}



 
Darts   (2003-01-05 14:04) [29]

> Николай Быков © (30.12.02 20:38)

Тебе, да в не в обиду будет сказано, прямая дорога к VB. Вполне приличный язык. Зачем свзяваться с глючным Delphi и великим и ужасным C?


 
Darts   (2003-01-08 13:11) [30]

Решил проблему?


 
Anatoly Podgoretsky   (2003-01-08 13:20) [31]

С установкой VB?


 
Darts   (2003-01-08 13:56) [32]

> Каа-то странно реагирует минимальное Win32приложение на сообщения [D6, Win2k]
> Николай Быков © (30.12.02 20:38)

Тепер до меня дошло, почему Винды как-то странно реагируют. Иногда. :)))))


 
KSergey   (2003-01-08 16:17) [33]

Автор ветки!
Почему вы проигнорировали сообщение Cobalt © (31.12.02 18:48), но кидаетесь немедленно реагировать на выпады в ваш адрес? Вам не жаль своего времени? Может не туда все же энергию направлять, а?
И еще не совсем понятно: странно реагирует на сообщения или звук не играет? Это, вообще-то, разные вещи.
1) Для начала поправьте путь к файлу на
"c:\\windows\\media\\tada.wav" (о чем и пытался вам сказать Cobalt, но видимо напрасно высказал это не в язвительном тоне. потому вы и не заметили ;)
2) Убедитесь что файл там есть.
3) Я не пользовался ф-цией PlaySound, а потому указываю лишь на формальную ошибку.

И еще я очень сомневаюсь, что в книге путь к файлу написан именно так, как вы привели.


 
KSergey   (2003-01-08 16:21) [34]

> Николай Быков © (04.01.03 14:23)
> + Там испоьзуются какие-то странные символы, коотрые мне
> опять же кто-то должен перевести на Паскаль, но т.к. этим
> никто заниматься не будет да и мне по неделе каждый перевод
> ждать неинтересно, то я хочу именно на Си писать

Не понятно: в чем загвоздка?


 
Николай Быков   (2003-01-08 23:46) [35]


> KSergey © (08.01.03 16:21)


> Не понятно: в чем загвоздка?

Не компилируется


 
KSergey   (2003-01-09 09:29) [36]

> Николай Быков © (08.01.03 23:46)
> Не компилируется

Стоп. Разговор же начался с того, что не реагирует (правильно) на сообщения? А для этого хотя бы компилироваться должна. Теперь выясняется, что и не компилируется...

Хотя по сути я врятли тут что-то подскажу, т.к. этим компилятором не пользовался. Единственное что бы посоветовал - возьмите нормальный компилятор (с IDE) и не выпендривайтесь ;)
Тот же VC++. Т.к. на начальном этапе пробиваться через все эти заумы с ключами комилятора - не так то просто. А то там еще, поди, и def-файл (или как-то там, давно это было ;) надо было бы вообще-то сделать, где прописать форматы выходного файла и т.п....
Ну либо напишите письмо с адресом этого компилятора, если он ен очень велик - не более 5Мб - может я его и вытяну и попробую разобраться, если уж так вам хочется именно им пользоваться, но по-моему, это несколько на онанизм смахивает... Опять же захочется в отладчике походить - а фиг...
Не, нафиг. Лучше сразу возьмите любой компилятор с IDE - жить будет проще.


 
Darts   (2003-01-09 09:54) [37]

http://www.bloodshed.net/

Dev-C++, которая включает IDE с отладчиком, подцветкой, компилятор gcc. Общий размер ~ 12Мб.


 
Николай Быков   (2003-01-09 10:25) [38]


> KSergey © (09.01.03 09:29)

Я вот этот компилятор (есть тот же самый, но только с IDE, Borland C++ 5.02 называется. он выдает такие же ошибки и предупреждения) взял потому, что у меня стоял Win2k и чтобы туда поставить VC++ (у меня только 7.0)нужно скачать откуда-нибудь SP2 (он вообще вместе с VS.NET идет, но только для англ. версии).
Теперь я себе поставил WinXP и, надеюсь, проблем не появится.


 
Darts   (2003-01-09 11:08) [39]

Тебе в принципе, любой компилятор пойдет (для Win), даже такой старый как Borland С++ 5.

Смотри мой пост [Darts (09.01.03 09:54)]
После борландовского компилятора с командной строки этого мало не покажется! Суди сами: стандартам ANSI C удовлетворяет (файлы типа windowsx.h или objbase.h есть), exe-шники малюсенькие (от 3 К, а у Борланда пустой файл весит от 45 кб, если не ошибаюсь + вроде бы проблемы с линковкой ресурсов), есть дебаггер, встроены некоторые автоматические средства.

Не понимаю, зачем ставить таких монстров, как VC++ 7 или VC++ 6 ради забав с WinAPI? Они не фига не помогут тебе. Только вдумчивое исследование MSDN может помочь тебе. Возьми ставрые книги Федорова или Суркиса для BPW, там в принципе, все хорошо разжевано

А так любой инструмент хорош в умелых руках.


 
KSergey   (2003-01-09 12:03) [40]

Николай Быков © (31.12.02 16:25)
так там написанно #include <windows.h> (подумайте теперь почему вы не это видите)

А почему кто-то должен еще о чем-то думать? Не видно=нету. А все остальное - кривость рук сайтостроителя.
На будущее совет: для простоты выкладывайте такие дела с расширением txt или прямо cpp - тогда никто их преббразовывать не будет и будет всем проще.
Впрочем в данном случае писать ваш пост было дольше, чем поправить свою же оплошность.

> Николай Быков © (09.01.03 10:25)
> он выдает такие же ошибки и предупреждения

Если бы вы потрудились еще раз спросить конкретно об ошибках и предупреждениях - было бы существенно проще помочь. А так я сейчас даже не смог за вашими многотрудными попытками всех облаять найти хоть одну ошибку, выданную компилятором.
Неужели обосрать всех полезнее, чем уточнить вопрос в том месте, куда вас ткнули носом? Я вообще поражаюсь вашей позицией вечно обиженного и попытками самоутвердиться в собсивенных же глазах. Зачем? (этоне вопрос! не надо на него отвечать!! Это факультативное домашнее задание!!!)



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

Форум: "Потрепаться";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.023 c
3-96622
YurikV
2003-01-14 09:57
2003.01.30
ODBC & Access


3-96516
AM
2003-01-14 14:33
2003.01.30
Почему после сжатия базы я не могу его открыть?


14-96976
Ixion
2003-01-12 01:04
2003.01.30
Есть ли Lazarus для Win32 ?


1-96766
Alecs
2003-01-20 12:43
2003.01.30
Как послать сообщение всем комп-ам программы


3-96518
bilkm
2003-01-14 14:43
2003.01.30
Простой вопрос - Отмена действия навигатора





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