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

» C++ WinAPI

Автор: Abs62
Дата сообщения: 27.11.2005 17:03
Nikopoloc
Внимательно читаем в MSDN описание параметра lpstrFile:

lpstrFile
Pointer to a buffer that contains a file name used to initialize the File Name edit control. The first character of this buffer must be NULL if initialization is not necessary.

А у тебя в этом буфере - мусор. Добавь szFile[0]=0 до вызова GetOpenFileName.
Параметр hwnd - правильный?

PS. Не забывай про функцию CommDlgExtendedError - она помогает диагностировать ошибки при вызове таких диалогов.

PPS.

Цитата:
Где можно посмотреть теги форума как выделять код.

Под формой ответа - "Опции сообщения". Слово "коды" кликабельно.
Автор: MrZeRo
Дата сообщения: 28.11.2005 13:01
Подскажите, пожалуйста, как отследить момент, когда открывается лоток привода CD?
Для чего это нужно:
например, вставлен диск, проигрывается файл с него, и пользователь вынимает диск. Вида через какое-то время начинает кричать, чтобы ей вставили диск назад, а как бы перехватить ситуацию выемки диска, чтобы корректно это обработать и остановить проигрывание? (это реализовано, например, в JetAudio)
Через FindFirstChangeNotification не получается.
Автор: vserd
Дата сообщения: 28.11.2005 16:15
доброго здравия.
Есть такая задачка.
В .rc файле есть описние двух диалогов, совпадающих на 99% во всем кроме стиля COMBOBOX-a. В одном случае это CBS_DROPDOWN, в другом CBS_DROPDOWNLIST. Хочется слить эти два дилога в один с каким нибудь самописным флагом который будет задавать стиль. Но не понятно как можно изменять стиль уже созданного контрола.
Почитав MSDN у меня сложилось впечатление что это невозможно или я неправ?
Не ужели прийдется держать два практически идентичных ресурса?

Код:
//**********************
ASK DIALOGEX 0, 0, 186, 87
STYLE DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Wanted info !!!"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
COMBOBOX IDC_EDIT,11,40,163,55,CBS_DROPDOWN | WS_VSCROLL |
WS_TABSTOP
DEFPUSHBUTTON "OK",IDOK,132,68,50,14,0,WS_EX_STATICEDGE
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,3,5,179,57
LTEXT "Enter, please, parameter # %d\nfor running command ""%s"" :",
IDC_STATIC_REQ,41,15,138,18
ICON 32514,IDC_STATIC,12,13,20,20
END
//**********************
ASK_TYPE DIALOGEX 0, 0, 186, 87
STYLE DS_MODALFRAME | DS_CENTER | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Wanted info !!!"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
COMBOBOX IDC_EDIT,11,40,163,55,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
DEFPUSHBUTTON "OK",IDOK,132,68,50,14,0,WS_EX_STATICEDGE
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,3,5,179,57
LTEXT "Enter, please, parameter # %d\nfor running command ""%s"" :",
IDC_STATIC_REQ,41,15,138,18
ICON 32514,IDC_STATIC,12,13,20,20
END
//**********************
Автор: Abs62
Дата сообщения: 28.11.2005 18:52
vserd
А GetWindowLong/SetWindowLong с GWL_STYLE и установкой/сбросом соответствующих CBS_флагов для окна этого самого COMBOBOX-a в обработчике WM_INITDIALOG пробовал?

Добавлено:
MrZeRo
Копай в сторону WM_DEVICECHANGE.
Автор: ShIvADeSt
Дата сообщения: 29.11.2005 00:49
MrZeRo
http://support.microsoft.com/kb/q163503/
вот название статьи How To Getting Notification of CD-ROM Insertion or Removal вроде то, что тебе надо.
vserd
Как вариант, контрол можно ручками создавать через CreateWindowEx
Автор: MrZeRo
Дата сообщения: 29.11.2005 10:53
Abs62
ShIvADeSt
Да, это оно. Спасибо!
Автор: vserd
Дата сообщения: 29.11.2005 16:31
Abs62

Цитата:
А GetWindowLong/SetWindowLong с GWL_STYLE и установкой/сбросом соответствующих CBS_флагов для окна этого самого COMBOBOX-a в обработчике WM_INITDIALOG пробовал

Попробую, спасибо!
Автор: DeADMoHAX
Дата сообщения: 03.12.2005 00:06

Код:
bool sendres(char fpath[128])
{
    HANDLE hFtp,hInet;
    strcat(fpath,"res.log");
    hInet=InternetOpen("MSIE6.0",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,INTERNET_FLAG_ASYNC);
    if(!hInet)
    {
        cout<<"Error with func InternetOpen !\n";
        cout<<GetLastError();
        return 0;
    }
    hFtp=InternetConnect(hInet,ftp_ip,INTERNET_DEFAULT_FTP_PORT,NULL,NULL,INTERNET_SERVICE_FTP,NULL,NULL);
    if(!hFtp)
    {
        cout<<"Error with func InternetConnect !\n";
        cout<<GetLastError();
        return 0;
    }
    if(!FtpPutFile(hFtp,"res.log","ftp/res.log",FTP_TRANSFER_TYPE_UNKNOWN,NULL))
    {
        cout<<"Error with putting file to the FTP\n";
        cout<<GetLastError();
        return 0;
    }
    
    InternetCloseHandle(hFtp);
    InternetCloseHandle(hInet);
    return 1;
}
Автор: Abs62
Дата сообщения: 03.12.2005 01:59
DeADMoHAX
Ну и заглянул бы в MSDN: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/wininet_errors.asp

Цитата:

ERROR_INTERNET_EXTENDED_ERROR
12003
An extended error was returned from the server. This is typically a string or buffer containing a verbose error message. Call InternetGetLastResponseInfo to retrieve the error text.

Вызови упомянутую функцию, да посмотри, что за отлуп сервер даёт.
Автор: distance
Дата сообщения: 03.12.2005 02:00
DeADMoHAX
ну, во-первых код неправильный. чем дальше по ходу действия возникнет ошибка, тем хуже. и вообще, потенциально небезопасный. экспойт сюда так и просится. про поддержку уникода я вообще молчу.
переписать хотя бы так:

Код:
bool sendres(LPTCSTR fpath, DWORD bufSize)
{
HANDLE hFtp=NULL;
hInet=NULL;

// хм, а в конце строки всегда будет слэш?
::StringCchCat(fpath, bufSize, _T("res.log"));

while(FALSE)
{
    ...
    if (!hInet)
        break;

    ...
    if (!hFtp)
        break;
}

if (hFtp)
    ::InternetCloseHandle(hFtp);

if (hInet)
     ::InternetCloseHandle(hInet);

return (hInet && hFtp);
}
Автор: DeADMoHAX
Дата сообщения: 03.12.2005 09:03

Цитата:
кстати, зачем ты передешь в функцию fpath, но реально эта переменная не используется?

она в функции FtpPutFile 3-й параметр по идее, просто щас обрубил, пока не разобрался.

Цитата:
экспойт сюда так и просится. про поддержку уникода я вообще молчу.

нафиг мне юникод. Да и эксплуатировать что-либо бессмысленно.

Цитата:
hInet=NULL;
без HANDLE - лол.

твой код не альтернативен. У меня не юзается MFC - только ВинАПИ и СТЛ.
Автор: Abs62
Дата сообщения: 03.12.2005 12:45
distance
А зачем тут while(FALSE){...}, и как оно должно работать? Может, имелось в виду do{...}while(FALSE)?
Автор: distance
Дата сообщения: 04.12.2005 01:45
DeADMoHAX

Цитата:
нафиг мне юникод

это ты про стандарт, поддерживаемый международной организацией iso и развивающийся уже более десяти лет? мощнО ну ладно, дело хозяйское.

Цитата:
без HANDLE - лол.

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

Цитата:
твой код не альтернативен

читал. много думал (c)
код не альтернативен чему?

Цитата:
У меня не юзается MFC

а mfc здесь и не главное. лень было код писать, если можно сделать copy-paste из проекта. смысл здесь не в CString, а в том, что ты получаешь вменяемую информацию об ошибке, о чем, кстати, чуть выше тебе поведал Abs62. а уж в какой это контейнер завернуть...
Abs62

Цитата:
Может, имелось в виду do{...}while(FALSE)

ага, точно! да, ночь - не самое лучшее время для написания програм
Автор: DeADMoHAX
Дата сообщения: 04.12.2005 17:27
distance

Цитата:
это ты про стандарт, поддерживаемый международной организацией iso и развивающийся уже более десяти лет? мощнО ну ладно, дело хозяйское.

пишу троя. если буду юзать юникод, будет прога боьше занимать места.
Автор: mr_eoi
Дата сообщения: 06.12.2005 09:59
DeADMoHAX
Думаю, главная причина ошибки в неправильном использовании INTERNET_FLAG_ASYNC. Или пиши вместо него 0 или читай здесь.
Автор: Nikopoloc
Дата сообщения: 28.12.2005 06:18
Подскажите как в WINAPI передать значения числа из элемента edit в переменную ,в билдере все просто edit1->text а как ето сделать с помошью API имеется некая переменная и при нажатии кнопки ей присваивается число что введено в элементе edit
приведите плиз пример как ето зделать с помошью API с использованием стандартного бробочика окна.
Автор: Inochkin
Дата сообщения: 28.12.2005 06:49
Как же это вас угораздило писать на апи юерский интерфейс? А вообще вот в сторону функции GetDlgItemInt можно посмотреть.
Автор: Abs62
Дата сообщения: 28.12.2005 07:54
Inochkin
Именно с API и стоит начинать. Тогда потом при и использовании RAD не возникнет проблем, когда что-либо не заработает. Когда понимаешь, что лежит в основе, искать источник бага значительно проще. Да и сделать что-либо нестандартное не станет непреодолимой задачей.
Автор: Inochkin
Дата сообщения: 28.12.2005 08:03
Abs62
Каждой задаче свой инструмент. И даже в учебных целях не стоит эти инструменты смешивать - пользы минимум, а бесполезной работы - ну очень много. А сделать что-то нестандартное любым инструментом невозможно - инструмент определяет допустимые рамки. Чтобы сделать что-то нестандартное, надо теорию изучать.
ЗЫ: щас модератор придет)
Автор: ShIvADeSt
Дата сообщения: 28.12.2005 09:02
Nikopoloc
GetWindowText (тогда нужен хэндл едита вроде получается GetDlgItem(hWnd,BTN_CLOSE);
либо второй вариант более гибкий SendMessage(тот же хэндл, WM_GETTEXT,0,lParam(переменная) ) только надо будет там посмотреть как переменной тип сделать (у меня на дельфи проще PChar)
Inochkin
Ты немного не прав, споров уже велось куча, в спец топиках, вкраце, чистое АПИ дает большую гибкость в программировании. Скачай вот эту софтинку http://shivadest.nm.ru/KeyFill.exe и попробуй сделать такой же интерфейс на VCL. Желательно сохранив объем как у нее.

Цитата:
А сделать что-то нестандартное любым инструментом невозможно - инструмент определяет допустимые рамки

Вот именно, что ВЦЛ и устанавливает эти рамки, АПИ нет.

Цитата:
ЗЫ: щас модератор придет)

Я уже здесь .
Поэтому отвечать в ПМ, ибо не надо тут флудить.
Автор: Nikopoloc
Дата сообщения: 28.12.2005 16:37
to ShIvADeSt:
Сенкс за инфу правда я зделал маленьку по другому я с воeму едиту присвоил свой HWND
Код:
LTPSTR Text;
HWND hwndEdit;
    hwndEdit = CreateWindow("EDIT",NULL,
WS_CHILD | WS_VISIBLE |WS_BORDER,
10, 10, 50, 20,
hwnd,
(HMENU) 123,
(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
NULL);
GetWindowText(hwndEdit,Text,255);
Автор: Abs62
Дата сообщения: 28.12.2005 18:24
Nikopoloc
atof, а лучше strtod - у неё есть контроль ошибок.
Автор: TeXpert
Дата сообщения: 04.01.2006 00:16
Abs62

Цитата:
Именно с API и стоит начинать. Тогда потом при и использовании RAD не возникнет проблем, когда что-либо не заработает. Когда понимаешь, что лежит в основе, искать источник бага значительно проще. Да и сделать что-либо нестандартное не станет непреодолимой задачей.

Золотые слова -- я бы в шапку вынес, ей-Богу! Сомневающиеся то же самое прочтут в другом виде в Рихтере.
Прошу прошения за офтоп.

P. S. Всех с Новым Годом!
Автор: DJ makrus
Дата сообщения: 26.01.2006 00:31

Цитата:
Именно с API и стоит начинать.

Вопрос по поводу WinAPI.
Как мне подсказали описание функций WinAPI можно найти в файле win32help.hlp который идет вместе с компиляторами Borland C++ и MS C++ и мож еще с какими. Размер файла около 20 Мб. Собственно просьба как раз в том, что мог бы его кто-нибудь выложить или подсказать может он где лежит.
Качать Borland C++ и иже с ними не хотелось бы, так как нужен только этот файл.
И может еще что-нибудь посоветуете по WinAPI, можно на английском, но лучше бы на русском.

PS. про MSDN и API-Guide знаю, есть так же 2 книги Румянцева "Азбука программирования в WIN 32 API"
Автор: Abs62
Дата сообщения: 26.01.2006 07:29
DJ makrus

Цитата:
Собственно просьба как раз в том, что мог бы его кто-нибудь выложить или подсказать может он где лежит.

Например, здесь: _http://www.borland.com/devsupport/borlandcpp/patches/BC52HLP1.ZIP

Цитата:
И может еще что-нибудь посоветуете по WinAPI, можно на английском, но лучше бы на русском.

Для начала - Петцольд, естественно. "Программирование для Windows". Там всё даётся практически с нуля, подробно и с примерами. Потом обязательно Рихтер "Создание эффективных WIN32-приложений". Must read. Далее по вкусу.
Автор: DeADMoHAX
Дата сообщения: 26.01.2006 07:41
Abs62

Цитата:
atof, а лучше strtod - у неё есть контроль ошибок.

Ды к у них разной предназначение. atof- из строки в флоат, а strtod -> в даубл
Хотя, может, разница не существенна.
Автор: Abs62
Дата сообщения: 26.01.2006 07:59
DeADMoHAX
MSDN говорит иначе:

Цитата:
atof, _wtof, atoi, _wtoi, _atoi64, _wtoi64, atol, _wtol
Convert a string to double (atof and _wtof), integer (atoi, _atoi64, _wtoi and _wtoi64), or long integer (atol and _wtol).
Автор: DeADMoHAX
Дата сообщения: 26.01.2006 08:05
Abs62
это у них просто в голове каша. В названии функции же сказано - в флоат, а не в даубл
К тому же в твоей цитате нет strtod'a

Added :
Думаешь, я strtod'a не знаю. Просто я про прототипы функций и иногда глупый MSDN

Added:
А, ну вас всех. Все равно не поймете.
Автор: Abs62
Дата сообщения: 26.01.2006 18:33
DeADMoHAX

Цитата:
это у них просто в голове каша.

Чес-слово, я в этом не виноват.

Цитата:
В названии функции же сказано - в флоат, а не в даубл

А ты не на название смотри, а на определение в math.h

Цитата:
К тому же в твоей цитате нет strtod'a

Названиям уже не веришь?

Цитата:
double strtod(
const char *nptr,
char **endptr
);
double wcstod(
const wchar_t *nptr,
wchar_t **endptr
);
Each function converts the input string nptr to a double. The strtod function converts nptr to a double-precision value. strtod stops reading the string nptr at the first character it cannot recognize as part of a number. This may be the terminating null character. wcstod is a wide-character version of strtod; its nptr argument is a wide-character string. Otherwise, these functions behave identically.
Автор: AdskiCorel
Дата сообщения: 27.01.2006 01:39
Помогите начинающему программисту
Делаю программу на WinApi, интерфейс MDI. Не как не удается прикрепить ToolBar, он создаеться, но клиентская область родительского(главного) окна некак не смещается(как например при создании меню), отчего получается что тулбар находится поверх полосы(за которую обычно окно перемещают) дочерних окон, приэтом еще глюки с перерисовкой начинаются .

Помогите чем можете, может присоздании тулбара в MDI нужно использовать особую функцию или флаг какой-то? Возможно можно как-то принудительно изменить клиентскую область главного окна?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637

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


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