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

» C++ WinAPI

Автор: vito333
Дата сообщения: 15.11.2004 09:09
когда я свой шаблон делаю я предполагаю размер системного шаблона такой как вижу при его открытии?и исходя из его размеров я размещаю свои контролы, чтобы они ставились вниз или еще куда? у меня сист. диалог например сторонней программой растягивается раза в 2 - это удобно. И еще, не пробовал выравнивать, допустим, новый комбобокс по системным, чтоб все ровно было? Проблем нету?
принцип понятен, я вот этого и не знал как раз, дальше метод самотыка ... и твоя помощь

Добавлено
а проект с кодом - давай, хоть и дельфи, но апи и ресурсы пойму
Автор: ShIvADeSt
Дата сообщения: 16.11.2004 01:00

Цитата:
И еще, не пробовал выравнивать, допустим, новый комбобокс по системным, чтоб все ровно было? Проблем нету?

проблем нет, просто берешь и располагаешь их там, чтобы они примерно были под системными, в крайнем случае, потом в хуковой процедуре сдвинешь их немного. Контролы могут добавляться вниз и справа, если ширина шаблона больше ширины текста с координатами 0,0 это я еще в письме упоминал, просто после первого сообщения я продолжил опыты и выяснил несколько фишек. Так вот, если поместить контрол за пределами данного текста, который пустой (если его убрать, то даже если ширина шаблона больше диалога открыть, то он не меняет свои размеры по крайней мере у меня) и выше его нижней грани (в смысле текста), то он ббудет располагаться справа диалога, там он растягивается и сверху, а если верхняя граница контрлола ниже нижней текста, то он будет находиться внизу.
Автор: react
Дата сообщения: 30.11.2004 13:27
Народ !!!

Промучался я с написанием программы под com-порт да так ничего и не получилось
Помогите плиз з нормальным рабочим сырцом (я уже кучу перепробовал но ниодин не заработал). Мне нужно
чтоб com-порт инициализировался и в асинхронном режиме ждал данных с порта и получив какие-то данные
выводил в консоль результат...

Заранее огромное спасибо !!!
Автор: WiseAlex
Дата сообщения: 30.11.2004 13:58
react
с асинхронностью есть свои заморочки - мне в свое время помог sawamail
пример кинул на мыло
Если что- спрашивай, заодно попроси sawamail его пример (там было понятнее но он у меня к сожалению не сохранился)


Автор: react
Дата сообщения: 30.11.2004 14:17
WiseAlex

Цитата:
пример кинул на мыло

на какое мыло ??? кинь плиз на omir@ua.fm
Автор: WiseAlex
Дата сообщения: 30.11.2004 15:11
react

Цитата:
на какое мыло ???

на профильное

Цитата:
кинь плиз на omir@ua.fm

лови
Автор: WiseAlex
Дата сообщения: 03.12.2004 10:51
react

Цитата:
кинь плиз на omir@ua.fm

не дошло
кинул еще раз
Автор: react
Дата сообщения: 03.12.2004 11:04
WiseAlex

Цитата:
не дошло
кинул еще раз


Пасибо, но оно опять не дошло... может слишком увесистое ? В любом случае sawamail мне уже выслал свой
пример - буду с ним разбираться... Все равно спасибо !!!
Автор: Sensej
Дата сообщения: 05.02.2005 15:15
У меня вопрос, может быть туповатый на фоне всех остальных, но я, мягко говоря, не великий спец по C и только начал изучать Win API и не понимаю фундаментальной вещи:

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

или

int WINAPI WinMain (блаблабла);

Какую роль играют CALLBACK и WINAPI в этих декларациях? Я привык к виду:
тип ИмяФункции (параметры);

а здесь:
тип ФИГЗНАЕТЧТО ИмяФункции (параметры);

Тэнькс.


Добавлено:
Ложная тревога, Дошло!


Цитата:

The WinMain function is declared as returning an int. The WINAPI identifier is defined in WINDEF.H with the statement:


#define WINAPI __stdcall


This statement specifies a calling convention that involves how machine code is generated to place function call arguments on the stack. Most Windows function calls are declared as WINAPI.

Автор: VictorMi
Дата сообщения: 01.03.2005 18:07
Интересно, почему в функцию KeyboardProc (которая работает с хуками) не передается хандл окна и вид сообщения? Почему сделали именно так? Ведь на первый взгляд логичнее передавать туда все сообщение.
Автор: TeXpert
Дата сообщения: 02.03.2005 01:47
VictorMi

Цитата:
Интересно, почему в функцию KeyboardProc (которая работает с хуками) не передается хандл окна и вид сообщения?

А зачем описатель окна передавать? Сообщения обрабатывает поток, а не окно (каждому окну сопоставляется поток, но не наоборот), а хук вызывается в контексте уже определённого потока, так что зачем переопределённость?
А параметры сообщения функции KeyboardProc передаются

Код:
LRESULT CALLBACK KeyboardProc( int code,
WPARAM wParam,
LPARAM lParam
);
Parameters

code
[in] Specifies a code the hook procedure uses to determine how to process the message. If code is less than zero, the hook procedure must pass the message to the CallNextHookEx function without further processing and should return the value returned by CallNextHookEx. This parameter can be one of the following values.
HC_ACTION
The wParam and lParam parameters contain information about a keystroke message.
HC_NOREMOVE
The wParam and lParam parameters contain information about a keystroke message, and the keystroke message has not been removed from the message queue. (An application called the PeekMessage function, specifying the PM_NOREMOVE flag.)
wParam
[in] Specifies the virtual-key code of the key that generated the keystroke message.
lParam
[in] Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag. For more information about the lParam parameter, see Keystroke Message Flags. This parameter can be one or more of the following values.
Автор: vTaurus
Дата сообщения: 03.03.2005 15:21
Всем, доброго времени суток!
Есть такая задача:
Скопировать текст из окна IE в другую программу.
В VB все просто:

Код:
Dim ie As Object
Set ie = CreateObject("Internetexplorer.Application")
ie.Visible = True
ie.Navigate "C:\Temp\test.html"
While ie.Busy
Wend
SendKeys ("^a")
SendKeys ("^c")
ie.Quit
далее куда надо вставляю = Clipboard.GetText
Автор: zorrack
Дата сообщения: 03.03.2005 15:26
vTaurus
А задача какова?
1. Просто взять текст, который является результатом процессинга HTML?
2. Скопировать текст с возможными рисунками в клипборд?
3. Еще что нибудь?
ИМХО, тут лучче оперировать самим ИЕ-контролом. У него можно взять интерфейсы документа, у которого можно взять внутренний текст и т.д. Или еще попользовать какие методы.
Автор: vTaurus
Дата сообщения: 03.03.2005 17:12

Цитата:
А задача какова?
1. Просто взять текст, который является результатом процессинга HTML?
2. Скопировать текст с возможными рисунками в клипборд?

Да именно это и нужно. У объекта CreateObject("Internetexplorer.Application") нет методов и свойст отдающих тект с ссылками и прочей ерундой. Есть свойство Document типа IHTMLDocument, IHTMLDocument2 и IHTMLDocument3. Но это путь дремучий, и задача того не стоит, поэтому я сначала попробывал по простому. Меня очень устраивается клипбоард, т.к. мне этот текст надо вставить в Lotus Notes.
В Lotus Notes свои заморочки, и мне наобходимо обойтись без внешних ActiveX. Только то, что есть на всех клиентских компьютерах.
Автор: VictorMi
Дата сообщения: 09.03.2005 10:46
TeXpert
Спасибо за ответ. Я уже начал понимать больше, но еще не до конца.

Цитата:
Сообщения обрабатывает поток, а не окно

Оно конечно так. Но самым простым кажется -- передавать в KeyboardProc -- код + все сообщение в виде структуры. Однако разработчики сделали не так. Меня не оставляет чувство, что здесь специально урезают возможности программиста. Почему - не понятно до конца.
Вот мой пример. Есть приложение -- там куча диалогов. Хочу, чтобы ВЕЗДЕ клавиша пробел работала как ОК. Если бы было как я написал, то все реализуется одним хуком. Получил WM_CHAR c пробелом в KeyboardProc , проверил, что от диалога, направил в тот диалог WM_COMMAND с ОК. Все.
А как в реальности это сделать коротко?
Автор: TeXpert
Дата сообщения: 11.03.2005 03:01
VictorMi
KeyboardProc служит только для наблюдения -- изменять этот хук не может.


Цитата:
Есть приложение -- там куча диалогов. Хочу, чтобы ВЕЗДЕ клавиша пробел работала как ОК. Если бы было как я написал, то все реализуется одним хуком. Получил WM_CHAR c пробелом в KeyboardProc , проверил, что от диалога, направил в тот диалог WM_COMMAND с ОК. Все.

Так что мешает всё это дело встроить в оконную процедуру? И не надо никакого хука -- ведь приложение же ваше? Или же, можно надкласс диалоговых окон можно создать. Правда, всё это относительно просто делается, если Вы пишете на C, с применением WinAPI. Если же используете вещи типа Delphi -- мои сочувствия, там всё через заднее место.
Автор: ShIvADeSt
Дата сообщения: 11.03.2005 05:02
TeXpert

Цитата:
Если же используете вещи типа Delphi -- мои сочувствия, там всё через заднее место.

Не надо вводить народ в заблуждение, если голова на месте и руки не из пояса растут, то все делается нормально и на Дельфи. Почему у Сишников (кстати не С, а С++ если не ошибаюсь) считается что на Дельфи АПИ плохо реализуется? Просто на С это более прозрачно, а на Дельфи часть скрыта от пользователей, но если разобраться с внутренностями, то все нормально реализуется.
Автор: mr_eoi
Дата сообщения: 11.03.2005 05:48
ShIvADeSt
06:02 11-03-2005
Цитата:
Просто на С это более прозрачно, а на Дельфи часть скрыта от пользователей, но если разобраться с внутренностями, то все нормально реализуется.

А для того, чтобы проще было разобраться все Delphi идут с исходными текстами своих библиотек. Всё просто и понятно. Для нетерпеливых - VCL. Для остальных практически полная поддержка WinAPI.
Автор: TeXpert
Дата сообщения: 13.03.2005 02:22
ShIvADeSt

Цитата:
Просто на С это более прозрачно, а на Дельфи часть скрыта от пользователей, но если разобраться с внутренностями, то все нормально реализуется

Ловлю тебя на слове -- в C действительно всё прозрачно, а Delphi -- это ведь
нечто вроде детского набора-конструктора: кубики, из которого надо быстренько что-то собрать. Так зачем считать разбор внутренностей этих кубиков за разумное решение? Я ведь об этом говорил! Человеку нужна ясность, не загромождённая разбором всяких там ненужных внутренностей Delphi. Ведь все вещи надо использовать по назначению, а Delphi для системного программирования не предназначен (хотя извращаться запрещать не вправе никто). Штаны снимать через голову не запретишь, иными словами.

mr_eoi

Цитата:
А для того, чтобы проще было разобраться все Delphi идут с исходными текстами своих библиотек. Всё просто и понятно. Для нетерпеливых - VCL. Для остальных практически полная поддержка WinAPI

Как посмотрел однажды, как реализуются некоторые вещи... Аж ужас... Требовалось подключение каких-то библиотек, кажется, для разделения памяти... При этом такие ограничения...
Вообще, Delphi, можно считать, умер после ухода Хейлсберга -- на 3-й версии. Но спорить не стану -- для быстрого показа она годится, хотя уже есть Visual Studio NET, на котором то же самое можно сделать.

P. S. Начинал с Delphi 1.0, бросил на 3.0, для системного программирования определённо не предназначен.
Автор: ShIvADeSt
Дата сообщения: 13.03.2005 11:48
TeXpert

Цитата:
P. S. Начинал с Delphi 1.0, бросил на 3.0, для системного программирования определённо не предназначе

Естесственно, и с этим никто не спорит, Дельфи больше заточен под ПРИКЛАДНОЕ программирование. И кстати, я не утверждал обратное, по крайней мере у себя в посте я такой мысли не обнаружил, а если
Цитата:
Или же, можно надкласс диалоговых окон можно создать.
считается системным программированием, то мне нечего сказать более. . ИМХО не надкласс, а подкласс, так как они будут иметь в качетсве родителя диалогывуе окна, но со своими некоторыми свойствами. Насчет Дельфи и С есть отдельный топик, и там достаточно уже копий поломали, так как сам по себе спор флудерский и смысла никакого не несет Все это ИМХО.
Автор: TeXpert
Дата сообщения: 15.03.2005 03:20
ShIvADeSt

Цитата:
...я не утверждал обратное, по крайней мере у себя в посте я такой мысли не обнаружил

Это да, но совсем некстати стал оправдывать Delphi, поскольку речь шла всё же о задачах, не совсем относящихся к прикладному, а скорее системному программированию. Если не веришь, почитай книгу Рихтера и Локи, уж Рихтер до тривиальных вещей не опускается.


Цитата:
...считается системным программированием, то мне нечего сказать более

Ещё как.


Цитата:
ИМХО не надкласс, а подкласс, так как они будут иметь в качетсве родителя диалогывуе окна, но со своими некоторыми свойствами

В книге Рихтера и Локи есть примеры как надклассов, так и подклассов диалоговых окон. Весьма поучительные.
Автор: VictorMi
Дата сообщения: 25.03.2005 16:15
TeXpert

Цитата:
В книге Рихтера и Локи есть примеры как надклассов, так и подклассов диалоговых окон. Весьма поучительные.

Хотелось бы знать полное название книги. И можно ли ее скачать где-либо?

Автор: TeXpert
Дата сообщения: 27.03.2005 03:31
Вот: Jonathan Locke, Jeffrey M. Richter, Windows 95 : A Developer's Guide. John Wiley & Sons, Incorporated, 1995.

Книга прекрасная, написана прекрасным аглицким (Рихтер не в пример другим его коллегам вообще классно пишет), почему-то эта книга на русский не переведена (насколько мне известно). И, как уже выше упоминал, эта книга не о том, как "накидать кнопки и сварить прогу за 5 минут".

У меня, как уже очевидно, на аглицком, в электронном виде, выдернул из CD серии "Developper Source". Полуфабрикат в виде doc-файла, собирался делать pdf с включением рисунков, но нет времени.

P. S. Вот тут кто-то продаёт за $5.35:
http://www.biblio.com/books/1924985.html
Автор: SaDFromSpb
Дата сообщения: 16.04.2005 19:06
По корректности выполнения многих функций можно судить по возвращаемому ими значению. С помощью него можно в программе проверять, корректно ли отработала функция, и сообщать пользователю об ошибке, если она была. Но как быть, если внутри функции происходит серьезная ошибка, из-за которой аварийно завершается все приложение? Требуется не позволить приложению завершиться аварийно. Так же, не очень понимаю, как можно дебажить такие случаи. А то вылезает код на асме (неужели именно в нем копаться)...
Автор: OdesitVadim
Дата сообщения: 16.04.2005 19:22
SaDFromSpb
Во многих языках есть конструкции для этого, например в Делфи

Код:
try
тут код с возможной ошибкой
except
//сюда попадём, если есть ошибка
on EZeroDivide do HandleZeroDivide;//Если было деление на ноль
on EOverflow do HandleOverflow;//Если было переполнение
on EMathError do HandleMathError;//Ошибка математики
else
HandleAllOthers;//Если ничего выше перечисленого не подошло
end;
Автор: Nikopoloc
Дата сообщения: 27.11.2005 12:37
Такой вопрос .Сейчас учусь программировать на WinApi и хотел чтобы не парится каждый
раз с регистрациеей класса окна вынести ее в отдельную функцию зделал так:

Reg(WNDPROC Proc,LPCTSTR szName)
{
    WNDCLASS w;
    memset(&w,0,sizeof(WNDCLASS));
    w.style= CS_HREDRAW | CS_VREDRAW;
    w.lpfnWndProc= Proc;
    w.hInstance=hInstance;
    w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    w.lpszClassName= szName ;
    w.hIcon = LoadIcon ( NULL, IDI_APPLICATION);
w.hCursor = LoadCursor (NULL, IDC_ARROW);
    return RegisterClass(&w);
}

Но при комптляции выдает такую ошибку:
D:\Microsoft Visual Studio\MyProjects\Library\tst.cpp(75) : error C2065: 'hInstance' : undeclared identifier
D:\Microsoft Visual Studio\MyProjects\Library\tst.cpp(75) : error C2440: '=' : cannot convert from 'int' to 'struct HINSTANCE__ *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.

Собственно что не так?
ps Сорри если ламерский вопрос я пока только учусь.
Автор: Abs62
Дата сообщения: 27.11.2005 12:44
Так компилятор же говорит, что не так - не знает он, что такое hInstance, и откуда его брать. Proc ты в функцию передаёшь, szName тоже, а hInstance?
Автор: KADABRA
Дата сообщения: 27.11.2005 13:08
Nikopoloc
Кроме того, что уже сказал Abs62 функция Reg возвращает некое значение, это надо указать.
Автор: Nikopoloc
Дата сообщения: 27.11.2005 15:00
Сенкс зделал:
int Reg(WNDPROC Proc,LPCTSTR szName,HINSTANCE hInstance)
и все заработало еше такой вопрос пытаюсь вызвать OpenDialog


PENFILENAME ofn;// структура стандартного диалогового окна
char szFile[260];// буфер для имени файла

HANDLE hf; // дескриптор файла

// Инициализация OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Покажем диалоговое окно Открыть (Open).

if (GetOpenFileName(&ofn)==TRUE)
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
        }

компилятор ошибки не выдает но диалог не появляется.
ps Где можно посмотреть теги форума как выделять код.
Автор: KADABRA
Дата сообщения: 27.11.2005 16:53
Nikopoloc
Лучшая дока по WinAPI: MSDN

Страницы: 12345678910111213141516171819202122232425262728293031323334353637

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


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