Решил выделить отдельную тему.
viewtopic.php?f=30&t=2446#p79815viewtopic.php?f=24&t=3865&p=79974#p7874На данный момент ситуация такая:
Имеются бинды для основной либы из состава IUP 3.7:
XDS Oberon-2
https://code.google.com/p/o2-iup/зеркало:
https://github.com/ilovb/o2-iupComponent Pascal
https://code.google.com/p/cp-iup/Осталось сделать бинды к доп. контролам
Сейчас я занимаюсь биндом к Canvas Draw
http://www.tecgraf.puc-rio.br/cd/Дальше на очереди Image Representation, Storage, Capture and Processing:
http://www.tecgraf.puc-rio.br/im/Недавно вышла версия IUP 3.8
В ней появился доп. контрол Scintilla. Но как оказалось русский ввод в нем под Windows на данный момент не работает. (В Ubuntu работает)
Сейчас я веду переписку с разработчиком и он знает об этой проблеме. Пока неизвестно будет ли патч к версии 3.8, но разработчик заверил меня что в следующей версии (с поддержкой юникода) этой проблемы не будет. Когда это будет пока неизвестно.
У себя я захардкодил так:
В исходнике ScintillaWin.cxx заменяем условие
::IsWindowUnicode(MainHWND()) || keysAlwaysUnicodeКод:
...
case WM_CHAR:
if (((wParam >= 128) || !iscntrl(wParam)) || !lastKeyDownConsumed) {
if (::IsWindowUnicode(MainHWND()) || keysAlwaysUnicode) {
wchar_t wcs[2] = {static_cast<wchar_t>(wParam), 0};
if (IsUnicodeMode()) {
// For a wide character version of the window:
char utfval[4];
unsigned int len = UTF8Length(wcs, 1);
UTF8FromUTF16(wcs, 1, utfval, len);
AddCharUTF(utfval, len);
} else {
UINT cpDest = CodePageOfDocument();
char inBufferCP[20];
int size = ::WideCharToMultiByte(cpDest,
0, wcs, 1, inBufferCP, sizeof(inBufferCP) - 1, 0, 0);
inBufferCP[size] = '\0';
AddCharUTF(inBufferCP, size);
}
} else {
if (IsUnicodeMode()) {
AddCharBytes('\0', LOBYTE(wParam));
} else {
AddChar(LOBYTE(wParam));
}
}
}
return 0;
...
на
TRUEКод:
...
case WM_CHAR:
if (((wParam >= 128) || !iscntrl(wParam)) || !lastKeyDownConsumed) {
if (TRUE) {
wchar_t wcs[2] = {static_cast<wchar_t>(wParam), 0};
if (IsUnicodeMode()) {
// For a wide character version of the window:
char utfval[4];
unsigned int len = UTF8Length(wcs, 1);
UTF8FromUTF16(wcs, 1, utfval, len);
AddCharUTF(utfval, len);
} else {
UINT cpDest = CodePageOfDocument();
char inBufferCP[20];
int size = ::WideCharToMultiByte(cpDest,
0, wcs, 1, inBufferCP, sizeof(inBufferCP) - 1, 0, 0);
inBufferCP[size] = '\0';
AddCharUTF(inBufferCP, size);
}
} else {
if (IsUnicodeMode()) {
AddCharBytes('\0', LOBYTE(wParam));
} else {
AddChar(LOBYTE(wParam));
}
}
}
return 0;
...
Собрать IUP можно с помощью GCC или MSVC
Проще всего это сделать с помощью
tecmakeИнструкция по установке:
http://www.tecgraf.puc-rio.br/tecmake/e ... #win_setup