Короче, раз никто толком WinAPI не знает, будем учить.
В общем, рецепт оказался универсальный.
Можно сменить как кисть фона (как в моем примере), так и собственно, и значок (ессно, его придется загрузить перед этим).
Вкратце:
PHP код:
static void AxBackgrPaint(Args _args)
{
#define.GCL_HBRBACKGROUND (-10)
#define.BS_SOLID (0)
#WinAPI
WinGDI winGDI = new WinGDI(0);
int brushHdr, oldBrushHdr;
int mdiHdr;
;
brushHdr = winGDI.createSolidBrush(WinAPI::RGB2int(0,0,0));
mdiHdr = WinApi::findWindowEx(infolog.hWnd(), 0, "MDIClient","");
oldBrushHdr = WinAPI::getClassLong(mdiHdr, #GCL_HBRBACKGROUND);
WinAPI::setClassLong(mdiHdr, #GCL_HBRBACKGROUND, brushHdr);
WinAPI::invalidateRect(mdiHdr);
winGDI.deleteObject(oldBrushHdr);
}
Да, и вписанная в класс WinAPI функция:
PHP код:
client static int setClassLong(int hWnd, int offset, int newValue)
{
DLL _winApiDLL = new DLL('USER32');
DLLFunction _setClassLong = new DLLFunction(_winApiDLL, 'SetClassLongA');
_setClassLong.returns(ExtTypes:: DWord);
_setClassLong.arg(ExtTypes:: DWord, ExtTypes:: DWord, ExtTypes:: DWord);
return _setClassLong.call(hWnd, offset, newValue);
}
Чтобы заменить иконку - нужно завести константу GCL_HICON (-14), соответственно, ну и загрузить иконку. Вообще, там можно извращаться с этим классом окна, как угодно, можно, к примеру, курсор поменять на символ Q1/Q2/Q3 (кому какой нравится).
недостаток у этого способа только один - при злоупотреблении сменой фона исходные кисти, которой был он был заполнен до очередной смены, не будут автоматом удалены при завершении приложения(что к WinNT-based не относится). Впрочем, это легко исправить. Достаточно удалять старые кисти/иконки/что ещё вызовом DeleteObject. (Upd: все-таки приделал. Чтоб всё было по-правилам).
Пишу я, значит, это, а Аксапта имеет у меня такой гламурный-гламурный вид...
P.S. Ну, блин, ну нафига же смайлики разворачивать в X++ коде, а, Mazzy?