Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Jun 04, 2020 11:37 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 50 posts ]  Go to page 1 2 3 4 Next
Author Message
 Post subject: Курсоры
PostPosted: Sun Mar 25, 2007 9:58 pm 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Подскажите пожалуйста, как удалить курсор мыши в окне программы или заменить на другой курсор (только без использования .cur файлов). Курсор могу нарисовать попиксельно.. а как это все дело в структуру в памяти загнать не знаю..
Quote:
Подфункция 4 - загрузить курсор

Параметры:
eax = 37 - номер функции
ebx = 4 - номер подфункции
dx = источник данных:

dx = LOAD_FROM_FILE = 0 - данные в файле
ecx = указатель на полный путь к файлу курсора
файл курсора должен быть в формате .cur, стандартном для MS Windows, причём размером 32*32 пикселя

dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память
ecx = указатель на данные файла курсора
формат данных такой же, как и в предыдущем случае

dx = LOAD_INDIRECT = 2 - данные в памяти
ecx = указатель на образ курсора в формате ARGB 32*32 пикселя
edx = 0xXXYY0002, где
XX = x-координата "горячей точки" курсора
YY = y-координата
0 ≤ XX, YY ≤ 31

Возвращаемое значение:
eax = 0 - неудача
иначе eax = хэндл курсора

Не знаю как это юзать :(


Top
   
 Post subject:
PostPosted: Sun Mar 25, 2007 10:16 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
может так?

Code:
mov eax,37
mov ebx,4
xor edx,edx
mov ecx,path
int 0x40

path db '/rd/1/cursor.cur'


Top
   
 Post subject:
PostPosted: Sun Mar 25, 2007 10:18 pm 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Veliant, дык говорю ж, что без использования внешних файлов.. ибо это ни к чему хорошему не приведет.


Top
   
 Post subject:
PostPosted: Sun Mar 25, 2007 11:04 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1072
Quote:
mov eax,37
mov ebx,4
mov edx,2
mov ecx,cur
int 0x40

cur:
db 0xaa, 0xrr, 0xgg, 0xbb ... так 32 раза
db ... так 32 строки

где аа - значение альфа-канала, rr - красный, gg - зеленый, bb - синий для каждого (!) пиксела
А вообще это мазохизм :) Проще файл считать и не мучаться


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 1:08 am 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Heavyiron wrote:
А вообще это мазохизм :) Проще файл считать и не мучаться

Я лублу помучаться..
Если не секрет, а как эта структура на сишке выглядеть будет? Типа такого?
Code:
char cur[32][4*32];

// или даже так

typedef unsigned __int32 Dword;
Dword cur[32][32];


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 2:27 am 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Ошибка при линковке через VS2005 :(
Code:
void ChangeCursor()
{
   char cur[32*32*4];
   __asm{
      mov      eax, 37
      mov      ebx, 4
      mov      edx, 0x05050002
      mov      ecx, cur
      int      0x40
   }
}

game.obj : error LNK2019: unresolved external symbol __chkstk referenced in function "void __cdecl ChangeCursor(void)" (?ChangeCursor@@YAXXZ)


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 11:34 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Serial

Ты решил загрузить курсор из стека ? Там сплошной мусор.
И чем тебе не нравятся cur ? Их можно в VC сделать.

Ладно, если тебе нравится raw ARGB, сохраняешь образ в файл и делаешь заглушку на асме

Code:
format MS COFF

public cursor1
public cursor2

section '.data' align 16 data readable writable

cursor1:
file 'cursor1.raw'
cursor2:
file 'cursor2.raw'


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 12:19 pm 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Serge wrote:
Serial
Ты решил загрузить курсор из стека ? Там сплошной мусор.
И чем тебе не нравятся cur ? Их можно в VC сделать.


Вот только что отладил работу...
Code:
   Dword *cur = new Dword[1024];
   for (int i = 0; i < 1024; i++)
   {
      cur[i] = 0x00000000;
   }
   delete[] cur;

И кстати.. отказался от красивого курсора с помощью API :( ибо он очень сильно мерцает. Сделал его прозрачным, и буду рисовать курсор вручную в окне приложения.

Всем спасибо за помощь!


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 1:45 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Serial

Он мерцает там где нет аппаратного курсора. А там где он есть начнёт мерцать твой вариант :(


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 8:46 pm 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Serge wrote:
Serial

Он мерцает там где нет аппаратного курсора. А там где он есть начнёт мерцать твой вариант :(

а где есть аппаратный курсор?


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 8:54 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1072
в ati видеокартах radeon 9ххх


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 9:41 pm 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Heavyiron wrote:
в ati видеокартах radeon 9ххх

Хм.. а это уже интересно 8)
Но всё равно имхо большинство юзеров будут с другими видюхами.

[офф]Кстати, тяжело ли написать подобный драйвер для NVidia?[/офф]


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 9:48 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1072
http://meos.sysbin.com/viewtopic.php?t= ... c&start=45


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 10:50 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Точнее аппаратный курсор должен работать на ATI 7500 - x850 и не работать на новых х1000+


Top
   
 Post subject:
PostPosted: Mon Mar 26, 2007 11:12 pm 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Heavyiron wrote:
http://meos.sysbin.com/viewtopic.php?t=17&postdays=0&postorder=asc&start=45

На сколько я понял по постам Serge, проблема только в отсечении курсора?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 50 posts ]  Go to page 1 2 3 4 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited