Показать сообщение отдельно
Старый 13.09.2005, 18:28   #21  
Maximin is offline
Maximin
NavAx
NavAx Club
 
415 / 361 (13) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Короче, раз никто толком WinAPI не знает, будем учить.

В общем, рецепт оказался универсальный.
Можно сменить как кисть фона (как в моем примере), так и собственно, и значок (ессно, его придется загрузить перед этим).

Вкратце:
PHP код:
static void AxBackgrPaint(Args _args)
{
    
#define.GCL_HBRBACKGROUND  (-10)
    #define.BS_SOLID           (0)
    #WinAPI
    
WinGDI                      winGDI = new WinGDI(0);
    
int     brushHdroldBrushHdr;
    
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 hWndint offsetint newValue)
{
    
DLL         _winApiDLL = new DLL('USER32');
    
DLLFunction _setClassLong = new DLLFunction(_winApiDLL'SetClassLongA');

    
_setClassLong.returns(ExtTypes:: DWord);
    
_setClassLong.arg(ExtTypes:: DWordExtTypes:: DWordExtTypes:: DWord);

    return 
_setClassLong.call(hWndoffsetnewValue);

Чтобы заменить иконку - нужно завести константу GCL_HICON (-14), соответственно, ну и загрузить иконку. Вообще, там можно извращаться с этим классом окна, как угодно, можно, к примеру, курсор поменять на символ Q1/Q2/Q3 (кому какой нравится).
недостаток у этого способа только один - при злоупотреблении сменой фона исходные кисти, которой был он был заполнен до очередной смены, не будут автоматом удалены при завершении приложения(что к WinNT-based не относится). Впрочем, это легко исправить. Достаточно удалять старые кисти/иконки/что ещё вызовом DeleteObject. (Upd: все-таки приделал. Чтоб всё было по-правилам).

Пишу я, значит, это, а Аксапта имеет у меня такой гламурный-гламурный вид...

P.S. Ну, блин, ну нафига же смайлики разворачивать в X++ коде, а, Mazzy?
За это сообщение автора поблагодарили: mazzy (15).