» C++ WinAPI
всем привет, проект MFC App,
есть
char tStr[255];
применяю к Edit Control функц GetWindowText(LPTSTR (tStr), 255)
после запуска вбиваю в Edit - 1111. функ возвращает токо 1-ый символ,
в чем причина?
есть
char tStr[255];
применяю к Edit Control функц GetWindowText(LPTSTR (tStr), 255)
после запуска вбиваю в Edit - 1111. функ возвращает токо 1-ый символ,
в чем причина?
user_MAN09
В том, что юникодные функции работают с юникодными строками. И если им силой впихнуть массив char вместо wchar_t, они всё равно заполнят его юникодными (двухбайтовыми) символами. Отсюда и дальнейшие непонятки.
Цитата:
А должно быть TCHAR tStr[255].
Цитата:
В том, что юникодные функции работают с юникодными строками. И если им силой впихнуть массив char вместо wchar_t, они всё равно заполнят его юникодными (двухбайтовыми) символами. Отсюда и дальнейшие непонятки.
Цитата:
есть
char tStr[255];
А должно быть TCHAR tStr[255].
Цитата:
TCHAR:
A WCHAR if UNICODE is defined, a CHAR otherwise.
This type is declared in WinNT.h as follows:
#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif
полезная информация Abs62,
но приходится менять много функц в коде, которые работали с char,
не могу найти аналога gethostbyname(char) для TCHAR,
please, help me!
но приходится менять много функц в коде, которые работали с char,
не могу найти аналога gethostbyname(char) для TCHAR,
please, help me!
user_MAN09
Цитата:
У getaddrinfo есть юникодный вариант - GetAddrInfoW.
Цитата:
Note The gethostbyname function has been deprecated by the introduction of the getaddrinfo function. Developers creating Windows Sockets 2 applications are urged to use the getaddrinfo function instead of gethostbyname.
У getaddrinfo есть юникодный вариант - GetAddrInfoW.
Abs62 спасибо за помощь, но я разбирал следующий участок кода:
struct hostent *host=NULL;
host = gethostbyname(chStr);
if (host == NULL)
{
SetDlgItemText(IDC_STATIC,
L"Unable to resolve host");
return;
}
и т. д.
а функц getaddrinfo и getaddrinfoW тут не подходят, пришлось добавить строчки
и использовать еще одну не безопасную функцию
char chStr[255];
CharToOem(tStr,chStr);
может поэтому в итоге вместо списка открытых портов я получил абракадабру?
struct hostent *host=NULL;
host = gethostbyname(chStr);
if (host == NULL)
{
SetDlgItemText(IDC_STATIC,
L"Unable to resolve host");
return;
}
и т. д.
а функц getaddrinfo и getaddrinfoW тут не подходят, пришлось добавить строчки
и использовать еще одну не безопасную функцию
char chStr[255];
CharToOem(tStr,chStr);
может поэтому в итоге вместо списка открытых портов я получил абракадабру?
user_MAN09
Цитата:
Это не то, это просто смена кодировки ANSI->OEM. Преобразованием WCHAR -> char занимается WideCharToMultiByte.
Цитата:
CharToOem(tStr,chStr);
Это не то, это просто смена кодировки ANSI->OEM. Преобразованием WCHAR -> char занимается WideCharToMultiByte.
Abs62. я смотрел на MSDN, вроде то, потому что еще проверял во время отладки программы
присваивал tchar tStr[255] 127.0.0.1 ч/з
chHostName.GetWindowText(tStr, 255); //chHostName - edit control
затем благополучно
CharToOem(tStr,chStr); //char chStr[255]
работает потому что chStr = 127.0.0.1
и уже потом host = gethostbyname(chStr);
присваивал tchar tStr[255] 127.0.0.1 ч/з
chHostName.GetWindowText(tStr, 255); //chHostName - edit control
затем благополучно
CharToOem(tStr,chStr); //char chStr[255]
работает потому что chStr = 127.0.0.1
и уже потом host = gethostbyname(chStr);
user_MAN09
Да, действительно. Но всё равно лучше использовать WideCharToMultiByte. Не случайно же про CharToOem в MSDN сказано "Do not use".
Да, действительно. Но всё равно лучше использовать WideCharToMultiByte. Не случайно же про CharToOem в MSDN сказано "Do not use".
Привет Abs62, доделал вчерашний код, вопрос не по С++, тем не менее
связан с кодировками, открываю книгу формата .chm, содержание - абракадабра,
а сам текст нормальный, глаза мозолит, может выручишь, как вчера?
связан с кодировками, открываю книгу формата .chm, содержание - абракадабра,
а сам текст нормальный, глаза мозолит, может выручишь, как вчера?
user_MAN09
Да уж, это совсем не в тему.
Возьми htm2chm, разбери им книгу и собери обратно, указав при сборке русский язык.
Да уж, это совсем не в тему.
Возьми htm2chm, разбери им книгу и собери обратно, указав при сборке русский язык.
Abs62, всехблаг!
Доброго вечера!
Как решить такую проблему?
PMIB_TCPTABLE pTcpTable
DWORD dwNumEntries
for (int i=0; i<pTcpTable->dwNumEntries; i++)
warning C4018: <: несоответствие типов со знаком и без знака
так понимаю что проба в том, что DWORD и int не очень ладят, что делать?
Как решить такую проблему?
PMIB_TCPTABLE pTcpTable
DWORD dwNumEntries
for (int i=0; i<pTcpTable->dwNumEntries; i++)
warning C4018: <: несоответствие типов со знаком и без знака
так понимаю что проба в том, что DWORD и int не очень ладят, что делать?
Да много чего можно.
1. Использовать unsigned i вместо int i.
2. Явно привести в операторе сравнения pTcpTable->dwNumEntries к int или i к unsigned.
3. Отключить это предупреждение - #pragma warning(disable : 4018)
4. Не обращать на него внимания.
...
1. Использовать unsigned i вместо int i.
2. Явно привести в операторе сравнения pTcpTable->dwNumEntries к int или i к unsigned.
3. Отключить это предупреждение - #pragma warning(disable : 4018)
4. Не обращать на него внимания.
...
Abs62
Цитата:
А можно пример кода?
Цитата:
HelioSS
Что имеется в виду под "Text Control"? Если обычный static control, то есть несколько вариантов. Один - задать ему стиль SS_NOTIFY и ловить сообщение STN_CLICKED в родительском окне. Другой - ловить в родительском окне WM_LBUTTONDOWN и проверять место, куда попал клик. Разбирался пару страниц назад. Ещё вариант - переопределить оконную функцию static control и ловить WM_LBUTTONDOWN там.
А можно пример кода?
благ Abs62, 3-й варик делал,про 1 и 4 думал,
а второй (pTcpTable->dwNumEntries к int) лень было вспоминать как делать)))
а второй (pTcpTable->dwNumEntries к int) лень было вспоминать как делать)))
HelioSS
Цитата:
По какому варианту? Если по первому, то всё как обычно. Ловим STN_CLICKED в обработчике сообщений родительского окна и делаем что нам нужно.
Код: switch(message) {
...
case WM_COMMAND:
if(LOWORD(wParam) == IDC_MY_STATIC_CONTROL && HIWORD(wParam) == STN_CLICKED) {
// Тут делаем, что нужно.
}
...
break;
...
}
Цитата:
А можно пример кода?
По какому варианту? Если по первому, то всё как обычно. Ловим STN_CLICKED в обработчике сообщений родительского окна и делаем что нам нужно.
Код: switch(message) {
...
case WM_COMMAND:
if(LOWORD(wParam) == IDC_MY_STATIC_CONTROL && HIWORD(wParam) == STN_CLICKED) {
// Тут делаем, что нужно.
}
...
break;
...
}
Привет Abs62, проект MFC - тема отправка ICMP пакетов-запросов (ping)
объявлены следующие структуры:
typedef struct tagECHOREQUEST
{
ICMPHDR icmpHdr;
DWORD dwTime;
char cData[64];
}ECHOREQUEST, *PECHOREQUEST;
typedef struct tagICMPHDR
{
u_char Type;
u_char Code;
u_short Checksum;
u_short ID;
u_short Seq;
char Data;
}ICMPHDR, *PICMPHDR;
static ECHOREQUEST echoReq;
echoReq.icmpHdr.Type = ICMP_ECHOREQ;
Добавлено:
ICMP_ECHOREQ: необъявленный идентификатор
подключена ws2_32.lib
старая константа? или какую то библиотеку подключить? или то и то)))
объявлены следующие структуры:
typedef struct tagECHOREQUEST
{
ICMPHDR icmpHdr;
DWORD dwTime;
char cData[64];
}ECHOREQUEST, *PECHOREQUEST;
typedef struct tagICMPHDR
{
u_char Type;
u_char Code;
u_short Checksum;
u_short ID;
u_short Seq;
char Data;
}ICMPHDR, *PICMPHDR;
static ECHOREQUEST echoReq;
echoReq.icmpHdr.Type = ICMP_ECHOREQ;
Добавлено:
ICMP_ECHOREQ: необъявленный идентификатор
подключена ws2_32.lib
старая константа? или какую то библиотеку подключить? или то и то)))
user_MAN09
Кто код писал, у того и надо спрашивать.
Если хочешь разобраться, что тут что, берёшь спецификацию протокола ICMP и смотришь там.
Кто код писал, у того и надо спрашивать.
Если хочешь разобраться, что тут что, берёшь спецификацию протокола ICMP и смотришь там.
разобрался))) код писал фленов
Здорово Abs62, почти закончил книгу, )))
последний пример, выручай
BYTE bPhysAddr;
char sPhysAddr[256]
Как значение bPhysAddr копировать в sPhysAddr (из byte в char)
последний пример, выручай
BYTE bPhysAddr;
char sPhysAddr[256]
Как значение bPhysAddr копировать в sPhysAddr (из byte в char)
user_MAN09
wsprintf(sPhysAddr, "%X", bPhysAddr). Или itoa(bPhysAddr, sPhysAddr, 16).
Если, конечно, я правильно понял, что требуется.
wsprintf(sPhysAddr, "%X", bPhysAddr). Или itoa(bPhysAddr, sPhysAddr, 16).
Если, конечно, я правильно понял, что требуется.
Abs62, Благодарю, попробую, wsprintf с небольшими манипуляциями подходит вроде)))
Как правильнее ограничивать минимальный размер окна, с учетом того, что контролы на нем тоже меняются и также имеют свои минимальные размеры?
V0lt
WM_SIZE сообщение ловить и в нем разрешать или нет. Или что то другое подразумевалось?
WM_SIZE сообщение ловить и в нем разрешать или нет. Или что то другое подразумевалось?
Вообщем есть главное окно. В нем есть самые разные "контролы". Каждый "контрол" имеет какой-то минимальный размер, при котором он еще нормально отображается. Это размер надо как-то где-то задать. Нужно менять размер главного окна, так чтобы все отображаемые "контролы" не уменьшились меньше своих минимальных размеров. "Контрол" может отображаться, а может быть скрыт, в последнем случае считаем, что его нет на главном окне.
Сейчас в главном окне в OnGetMinMaxInfo идет расчет его минимального размера. Для контролов пришлось придумать оригинальное свойство GetMinWidth(). Это мне кажется не самым удачным. Хотелось бы обойтись более стандартными средствами.
Я хочу разобраться хотя-бы с шириной. Высота у "контролов" фиксированная и считается через CalcFixedLayout(TRUE, TRUE).cy
Сейчас в главном окне в OnGetMinMaxInfo идет расчет его минимального размера. Для контролов пришлось придумать оригинальное свойство GetMinWidth(). Это мне кажется не самым удачным. Хотелось бы обойтись более стандартными средствами.
Я хочу разобраться хотя-бы с шириной. Высота у "контролов" фиксированная и считается через CalcFixedLayout(TRUE, TRUE).cy
V0lt
Цитата:
Почитай тут, там предлагается класс по твоей проблеме. Посмотри реализацию, может подойдет
http://www.codeguru.com/cpp/w-d/dislog/resizabledialogs/article.php/c1947
Цитата:
Сейчас в главном окне в OnGetMinMaxInfo идет расчет его минимального размера. Для контролов пришлось придумать оригинальное свойство GetMinWidth(). Это мне кажется не самым удачным. Хотелось бы обойтись более стандартными средствами.
Почитай тут, там предлагается класс по твоей проблеме. Посмотри реализацию, может подойдет
http://www.codeguru.com/cpp/w-d/dislog/resizabledialogs/article.php/c1947
Вопрос ко всем - как можно отловить момент когда пользователь "остановился" перетаскивать окно. Т.е. когда мы перетаскиваем окно и в конце отпускаем кнопку мышки.
OnMove и OnMoving - ясно дело не подходят, т.к. они их события срабатывают все время пока мы перемещаем окно.
Есть мысль - параллельно следить за мышкой, и как только мышка перестала двигаться и не надата левая клавиша - считать что перемещение закончено.
Что скажете ???
OnMove и OnMoving - ясно дело не подходят, т.к. они их события срабатывают все время пока мы перемещаем окно.
Есть мысль - параллельно следить за мышкой, и как только мышка перестала двигаться и не надата левая клавиша - считать что перемещение закончено.
Что скажете ???
Aleksoid1978
Цитата:
Ловить в своем приложении или в чужом (в смысле ловить перемещение любого окна)?
Цитата:
Вопрос ко всем - как можно отловить момент когда пользователь "остановился" перетаскивать окно. Т.е. когда мы перетаскиваем окно и в конце отпускаем кнопку мышки.
Ловить в своем приложении или в чужом (в смысле ловить перемещение любого окна)?
Aleksoid1978
Взводить некий флаг в обработчике WM_MOVING и проверять/сбрасывать его в обработчиках WM_NCLBUTTONUP и WM_LBUTTONUP. Пойдёт?
Взводить некий флаг в обработчике WM_MOVING и проверять/сбрасывать его в обработчиках WM_NCLBUTTONUP и WM_LBUTTONUP. Пойдёт?
Страницы: 12345678910111213141516171819202122232425262728293031323334353637
Предыдущая тема: посоветуйте книги по SQL
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.