Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» C++ WinAPI

Автор: react
Дата сообщения: 07.02.2004 01:31
Народ, помогите плиз - я в тупике !!!

Как сотворить программу, в которой не регистрировалось никакого WNDCLASS'а и
запускался бы диалог, а не стандартное какое-нить окно... Я пишу что-то типа:

Код:
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE, LPSTR, int)
{
MSG msg;
DialogBoxParam(hInstance, TEXT("IDD_MainDialog"), NULL, (DLGPROC)DialogProc, 0);
ShowWindow(hDlg, SW_SHOW);

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

Автор: vito333
Дата сообщения: 07.02.2004 16:47
а сама диалоговая процедура у тебя присутствует?

Цитата:
(DLGPROC)DialogProc

для начала?
Автор: mihas83
Дата сообщения: 08.02.2004 07:02
react
Советую почитать Рихтера... Там очень много толковых примеров...
Автор: react
Дата сообщения: 08.02.2004 08:01
vito333

Цитата:
а сама диалоговая процедура у тебя присутствует

Конечно присутствует !!!


mihas83

Цитата:
Советую почитать Рихтера... Там очень много толковых примеров...

Я ужо читал - там примеры только через классы написаны ...
Автор: mihas83
Дата сообщения: 08.02.2004 10:56
react

Цитата:
Я ужо читал - там примеры только через классы написаны

Никакого МFC там и близко нет. Чистый АPI + макросы-распаковщики сообщений...
Автор: TeXpert
Дата сообщения: 08.02.2004 23:49
react
Помнится, нечто подобное было у меня, когда был совсем зелёный. Это если в редакторе ресурсов (насколько помню) галочку поставишь насчёт класса диалогового окна, то после успешной сборки проекта ни шиша не увидишь. Впрочем, экспериментируй. А вообще, у Рихтера (и не только) много кода на базе диалоговых окон, посмотри его же книгу о программировании Windows 95 интерфейса или его же примеры из MSDN прежних годов выпуска, в его более ранних книгах примеры коротенькие и ясные, без лишних прибамбасов -- в этом смысле последнее издание менее предпочтительно. Вообще-то вс довольно элементарно. А если бы ты выложил архив твоего проекта, мигом бы тебе указали на глюки.
Автор: ShIvADeSt
Дата сообщения: 09.02.2004 01:03

Цитата:
ShowWindow(hDlg, SW_SHOW);

while(GetMessage(&msg, (HWND) NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}


я исмпоьлзовал просто DialogBox. Так как там не надо заморачивать с TranslateMessageю
Если хочешь пулну проект, котрый делает диалоговое окно и работает с ним. Правда на дельфи.
Автор: aplex
Дата сообщения: 09.02.2004 19:39


Есть некая прога, есть ее основное окно и дочерние окна этого окна. Причем сделано так что в основное окно вделаны эти дочерние. Spy++ отлавливаю сообщения при разных действиях. Посылаю аналогичные сообщения програмно. На сообщения посылаемые основному окну прога реагирует, на посылаемые дочерним нет. Может не все может SendMessage или в чем здесь хитрость ?
Автор: anat75
Дата сообщения: 24.02.2004 18:44
Как развернуть программу из панели задачь и системного трея из другой программы. Задача такая запускаешь программу если есть вторая копия необходимо её показать пользователю. Если форма скрыта другими окнами всё получается. Из панели задачь - косяки. Да программа делается на стройке 6.
Автор: ssx
Дата сообщения: 24.02.2004 19:20
anat75

Цитата:
Как развернуть программу из панели задачь и системного трея из другой программы. Задача такая запускаешь программу если есть вторая копия необходимо её показать пользователю. Если форма скрыта другими окнами всё получается. Из панели задачь - косяки. Да программа делается на стройке 6.

ShowWindow(hwnd, SW_SHOW);
Автор: react
Дата сообщения: 07.04.2004 01:40
Люди, кто-то под OWL писал ? Такой вопрос - есть сообщение EV_WM_CAPTURECHANGED
которое присылается когда окно "теряет" мышу, так вот вся проблема в том, как его
обработать - виртуального обработчика то нет

Если кто знает решение этой проблемы - напишите плиз, буду очень признателен...
Если кто знает как этот message обрабатывать на Win_API - тоже пишите, может по
аналогии разберусь...
Автор: ShIvADeSt
Дата сообщения: 07.04.2004 03:17
Попробуй переопределить WinProc у окна, сохранив указатель где-нить в переменной, потом в своей винпрос смотришь если это то сообщение, то делаешь код, иначе вызываешь обработчик родной процедуры. примерно так

Цитата:

где нить в креате

OldProc:=SetWindowLong(GetDlgItem(hWnd,BTN_FILE), GWL_WNDPROC, Integer(@MenuProc));

а это в твоей процедуре, после проверки и обработке нужного сообщения

result := CallWindowProc(pointer(OldProc), hWnd, Msg, wParam, lParam);
end;



Автор: react
Дата сообщения: 07.04.2004 07:53
ShIvADeSt
Это все конечно правильно, но в OWL это реализовывается по другому...
Автор: vito333
Дата сообщения: 07.04.2004 08:26
а нет ли у кого готовой функции определения кодировок вин, кои, исо,мак, дос на С?
если есть - подкиньте плиз.
Автор: vito333
Дата сообщения: 10.04.2004 06:22
кто-нибудь знает, как реализовать проверку орфографии средствами Word?
Автор: TeXpert
Дата сообщения: 10.04.2004 22:45
vito333

Цитата:
а нет ли у кого готовой функции определения кодировок вин, кои, исо,мак, дос на С?

Это в каком смысле-то? Определять, в какой кодировке содержимое файла/буфера? Но это, вообще-то, бессмысленно. Или, какой локаль установлен для потока? Хотя, судя по вопросу, на это не похож...


Цитата:
кто-нибудь знает, как реализовать проверку орфографии средствами Word?

А это каким боком к теме топика?
Автор: vito333
Дата сообщения: 11.04.2004 00:31
TeXpert
1.

Цитата:
Это в каком смысле-то? Определять, в какой кодировке содержимое файла/буфера? Но это, вообще-то, бессмысленно. Или, какой локаль установлен для потока? Хотя, судя по вопросу, на это не похож...

в самом прямом - определение кодовой страницы текстового файла - но уже не надо - реализовал ...


2.


Цитата:
кто-нибудь знает, как реализовать проверку орфографии средствами Word?

А это каким боком к теме топика?


а таким, что пишу мелкий редактор на Спп и WinAPI, работка достаточно трудоемкая, вот регулярно и прошу помощи - сейчас подумал, как прицепить проверку орфографии - задал вопрос ...
Автор: TeXpert
Дата сообщения: 11.04.2004 23:05
vito333

Цитата:
...но уже не надо - реализовал ...

Надеюсь, ты понимаешь, что это сильное утверждение?


Цитата:
...сейчас подумал, как прицепить проверку орфографии - задал вопрос ...

Ну, раз уж пишешь отдельный редактор, то имеет смысл, наверное, использовать программу проверку орфографии, которая работает отдельно (в смысле -- ставится отдельно) -- когда-то была, например, WinOrfo, типа этого, и причём не одна прога.
Автор: vito333
Дата сообщения: 12.04.2004 05:24
TeXpert

Цитата:
Надеюсь, ты понимаешь, что это сильное утверждение?


это я не понял ....


Цитата:
Ну, раз уж пишешь отдельный редактор, то имеет смысл, наверное, использовать программу проверку орфографии, которая работает отдельно (в смысле -- ставится отдельно) -- когда-то была, например, WinOrfo, типа этого, и причём не одна прога.


хочу Word, потому что он есть везде, на каждой машине. В крайнем случае начеркаю свою проверку - просто муторно достаточно на АПИ все писать.
Автор: TeXpert
Дата сообщения: 12.04.2004 23:03
vito333

Цитата:
это я не понял ....

Хм,

Цитата:
...определение кодовой страницы текстового файла

требует эвристики, тут никакая функция API не поможет. Я об этом. Требуется, грубо говоря, искусственный интеллект привлекать (смысловой разбор содержимого).
Например, есть слова (записанные в кодировке Windows ANSI 1251), которые при их перекодировке на другую (скажем, OEM 866 -- DOS) кодировку переходят в другие слова. Скажем, твой файл состоит из таких слов. И как ты собрался кодировку определить в этом случае?


Цитата:
хочу Word, потому что он есть везде, на каждой машине.

Не аргумент. На Unix/Linux нет Word'а, да и далеко не везде её ставят.


Цитата:
В крайнем случае начеркаю свою проверку - просто муторно достаточно на АПИ все писать.

Довольно муторная задача, однако. Обычно этим группы людей заняты.
Автор: vito333
Дата сообщения: 13.04.2004 04:01
TeXpert
чего-то я тебя совсем не понимаю - ты сам кодишь на чем нибудь?


Цитата:
...определение кодовой страницы текстового файла

требует эвристики, тут никакая функция API не поможет. Я об этом. Требуется, грубо говоря, искусственный интеллект привлекать (смысловой разбор содержимого).
Например, есть слова (записанные в кодировке Windows ANSI 1251), которые при их перекодировке на другую (скажем, OEM 866 -- DOS) кодировку переходят в другие слова. Скажем, твой файл состоит из таких слов. И как ты собрался кодировку определить в этом случае?


я же написал, что уже реализовал.



Цитата:
хочу Word, потому что он есть везде, на каждой машине.

Не аргумент. На Unix/Linux нет Word'а, да и далеко не везде её ставят


я же сказал, пишу на чистом WinAPI, даже рантайм сишный не цепляю, при чем тут ..ix?
а Word есть почти везде и это позволит не раздувать программу.


Цитата:
В крайнем случае начеркаю свою проверку - просто муторно достаточно на АПИ все писать.

Довольно муторная задача, однако. Обычно этим группы людей заняты.


больше чем просто орфографическую проверку по словарю и не буду сам делать, а это не очень сложно, только что муторно ...


Добавлено
_http://vito.rbcmail.ru/Mark.zip
качни и посмотри
Автор: TeXpert
Дата сообщения: 14.04.2004 23:17
vito333

Цитата:
...я же написал, что уже реализовал

Может ещё и умеешь определять, в какой кодировке текст -- Windows ANSI или Unicode?


Цитата:
...чего-то я тебя совсем не понимаю - ты сам кодишь на чем нибудь?

Несомненно. Иначе и сомнения не возникли бы.
Автор: vito333
Дата сообщения: 15.04.2004 04:24
TeXpert

Цитата:
Может ещё и умеешь определять, в какой кодировке текст -- Windows ANSI или Unicode?

ты прикалываешься? IsTextUnicode() не знаешь?
я, правда, чуть позже определение Unicode встрою - сейчас делаю сохранение RTF текста в "компактный" RTF - который поменьше в 3-4 раза по размеру.



Цитата:
...чего-то я тебя совсем не понимаю - ты сам кодишь на чем нибудь?

Несомненно. Иначе и сомнения не возникли бы.


на чем пишешь?

а вообще по программированию РуБоард слабоват как-то, хотя наверно это касается WinAPI ...
Автор: ShIvADeSt
Дата сообщения: 15.04.2004 07:43

Цитата:
хотя наверно это касается WinAPI

Вот тут ты ошибаешься, это моя слабость. Просто иногда вопросы задают, которыми я не увлекался а так у меня в придачу есть куча хороших факов , так что спрашивай
Автор: vito333
Дата сообщения: 15.04.2004 09:45
ShIvADeSt



Цитата:
Вот тут ты ошибаешься, это моя слабость. Просто иногда вопросы задают, которыми я не увлекался а так у меня в придачу есть куча хороших факов , так что спрашивай


у меня тоже куча всякой инфы по WinAPI - но мало нас таких )))
Автор: ShIvADeSt
Дата сообщения: 16.04.2004 02:02

Цитата:
меня тоже куча всякой инфы по WinAPI

К тому же несмотря на то что кодю я на дельфи, считаю если прога может быть маленькой она должна быьб маленькой, особенно если времени валом и можно поизвращаться на АПИ, а вот если сроки поджимают, тогда только ВЦЛ. У меня кстати есть несколько старых проектов со своим интерфейсом на чистом АПИ, я даже для диплома на нем прогу писал по защите компа, так что согласен нас немного, но это лучше чем когда я начинал, тогда на то что сейчас в любой эхе можно найти уходили недели размышлений (пример рекурсивный обход папок, для меня это было тяжело, зато потом сам написал рекурсивный обход реестра. Сейчас АПИ использую везде где можно и сеть смысл (например когда разбирался с твоим вопросом о тотале и гетсоммандлайн ). Так что пусть люди не боятся и спрашивают, что знаем скажем а что не знаем разберем.
Автор: TeXpert
Дата сообщения: 16.04.2004 02:15
vito333

Цитата:
ты прикалываешься? IsTextUnicode() не знаешь?

Эх... Не прикалываюсь я...
Вот из Platform SDK:

Цитата:
The IsTextUnicode function determines whether a buffer is likely to contain a form of Unicode text. The function uses various statistical and deterministic methods to make its determination...


А вот цитата из Jeffrey Richter, Programming Applications for Microsoft Windows:

Цитата:
The problem with text files is that there are no hard and fast rules as to their content. This makes it extremely difficult to determine whether the file contains ANSI or Unicode characters. IsTextUnicode uses a series of statistical and deterministic methods in order to guess at the content of the buffer. Because this is not an exact science, it is possible that IsTextUnicode will return an incorrect result.

Надеюсь, комментарии излишни?
Как гласит аглицкая пословица, "Цепь не прочнее своего слабейшего звена". Стоит ли возиться с ненадёжными вещами?

А вот насчёт других кодировок Рихтер молчит (угадай, почему?). Но мы сами можем догадываться.

Насчёт твоей "реализации".

Цитата:
...чего-то я тебя совсем не понимаю

Ну что же, раз непонятно, то придётся разжёвывать.
Создай файл в кодировке Windows следующего содержания

Код: ПОЙ ПЕСНЮ!!!
Автор: krisik
Дата сообщения: 16.04.2004 02:24
рисовал интерфейс прожки на винапи, чистом, компилил на visual c++.

что делал внутрях:
1. рисовал все границы сам
2. заголовок тоже отрисовывал сам
(1,2 = WM_NCACTIVATE, WM_NCPAINT)
3. создавал свою кнопку закрытия окна - отлавливал клики на заголовок. (WM_NCLBUTTONDOWN)
4. менял размеры клиентской области - увеличивал(это делается каждый раз когда WM_NCCALCSIZE), причем вот так:

case WM_NCCALCSIZE:
lpncsp = (NCCALCSIZE_PARAMS*) lParam;
lpncsp->rgrc[0].top-=10;
lpncsp->rgrc[0].right+=1;
lpncsp->rgrc[0].left-=1;
lpncsp->rgrc[0].bottom+=1;
DefWindowProc(hWnd, WM_NCCALCSIZE,wParam,(LPARAM)lpncsp);
break;
5. ну и еще окно можно таскать не за заголовок:
case WM_LBUTTONDOWN:
PostMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION,0);
break;


ТАК ВОТ! все красиво рисуется, быстро, но! если начинать баловаться и взять мышкой уголок окошка и начать быстро водить по всему экрану, иногда вылазят офигенные клюки - окно перестает прорисовываться нормально, пропадают иконки с рабочего стола, у знакомого пропала кнопка пуск, на рабочем столе появились кусочки окна от download manager(хотя окно вообще говоря находится обычно в другом месте) и т.д. он еле закрыл окошко этой проги(а у неё еще убраны насильственно стандартные кнопки закрыть/...).

откуда это взялось - не могу никак понять.
причем глюк был еще и до появления 3 и 4го пунктов.

где править?

Добавлено
добавление:

прога тестилась на winxp со включенной прорисовкой содержимого окна при изменении его размеров.
Автор: vito333
Дата сообщения: 16.04.2004 04:55
TeXpert
вообще спасибо за нормальный разговор - всега приятно пообщаться на интересующие темы с умным человеком.

насчет пой песню!! - это прикольно ))
но мне не стыдно за свою программу - я вставил неплохой алгоритм (чужой,правда) и, думаю, пока его достаточно - все-таки определяет 5 кодировок и позволяет перекодировать друг в друга 7-8. Не отказываться же от работы с кодировками из-за того, что возможны погрешности в автоопределении - без этого такая утилита нафиг не нужна будет и мне самому. А позже и над ПОЙ ПЕСНЮ!!! поработаю, лежит у меня наработка по принципально иному анализу текста - просто ее надо с нуля кодить, зато если добавить и ее, думаю неправильные песни больше не проскочат ))).
Попробовал, кстати, эту песню с разными алгоритмами (разные редакторы) - разброд и шатания )) - кто-то смог, кто-то нет.




Цитата:
ты прикалываешься? IsTextUnicode() не знаешь?

Эх... Не прикалываюсь я...


чего ж так печально! )
ну есть вероятность неправильного определения юникода, так что? разве это критично?
ну попробую уменьшить ее дополнительным анализом.
Ты же посмотри - в своей программе я ставлю целью скорость и минимальный размер (кстати из 38 кб кода около 10-12 кб - ресурсы) с реализацией основных фич, присущих Notepad-клонам (я для себя так и решил, что mark - это заменитель Notepad-заменителей )).
Всегда остается возможность нажать в статусбаре правую кнопку и выбрать кодировку.
Вот если бы от правильного определения кодировки по первым 2-3 словам зависело что-то важное и критичное, пришлось бы усиливать алгоритм определения.
А так конечно ты прав - но только где 100% вероятности?
Вероятность просто глюка в моей программе (да наверно и во многих других) с этой точки зрения просто огромна.
Рихтер о багах в своих текстах тоже что-то говорил в начале книги.



Цитата:
Ты можешь возразить, что в твоём файле будет много слов. Но представим ситуацию: ты реализовал свой "метод" в программе, которая получает на вход ключевое слово, от правильности трактовки которого зависит многое. Или, скажем, имеется файл словаря, который, в принципе может состоять неоднозначных для твоей "реализации" слов. Например, файл в DOS кодировке, содержащий слова

Код:
Яр
яр

будет неправильно распознан.


хм, я не спорю, все верно - наверно не стоит больше программированием заниматься - результат один - хаос ))).

Я и сам могу примеров привести, даже больше, наверное, чем ты, потому что кодировки и так и так обсасывал, продумывал трудные моменты - например моя программа автоматически выходит из режима определения кодировки с ответом "Кодировка ANSI" если количество символов из расширенного набора меньше 5% от общего количества символов в анализируемом тексте ((.

Так что пока код что называется "грязный", но приятно радующий глаз.



Цитата:
Это как сказать. Просто, не все так охотно окликаются, мне тоже проще было бы пройти мимо, оставив всё как было


не проходите мимо и вам воздастся! )

Я вообще, кстати, не программер - это так, хобби, которое в последнее врея из-за этого АПИ хавает просто огромную кучу времени, тем более, что прогу делаю именно минимальной, как уже писал, без рантаймов, со своей точкой входа и прочей минимизацией на VC++.NET, а это дико усложняет все - заморился иногда ошибки отлавливать.

Что еще основного планирую - подсветка синтаксиса (по методу IcZelion), сохранение "компактных" РТФ (как в Atlantis) - сейчас делаю, чистка текста по шаблонам (как в Иероглифе и AfterScan), моментальная загрузка (mapping), отлов последних буферов обмена - короче ужассс.

Когда все это вставлю (даже "грязно") - вздохну облегченно, отдохну и высплюсь.

Вот только нафиг это мне?
Хотя это будет у меня на 2-м месте стоящая по используемости программа, после Total Commander (не считая M$ Windows)).



krisik
выложил бы прогу посмотреть - может тогда и подскажем, когда сами увидим, в какой момент глюки лезуть.
Раз ты сам кучу нетривиальных моментов обрабатываешь, то блин можно искать и искать, я уже убедился и сам решил ПОКА лишний раз с отрисовками не связываться.
Автор: react
Дата сообщения: 17.04.2004 01:27
Народ, помогите плиз:
подскажите плиз как определить ушла ли мыша за пределы какого-то окна, может
винда посылает сообщение об уходе мыши из окна. По крайней мере когда мыша
двигается внутри окна приходит сообщение WM_MOUSEMOVE.

Заранее сенькс !!!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637

Предыдущая тема: посоветуйте книги по SQL


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.