Помогите новичку

Applications development, KoOS API questions
  • Просто определяй окно без рисования чего либо.
    А поверх рисуй уже рамку из линий и заливай фон красным.

    У меня вопрос: как бороться с переопределениями?

    Code: Select all

    1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h(112): см. объявление "strlen"
    1>F:\tinybasic\smalllibc\kosSyst.h(121): error C2556: char *strrchr(const char *,int): перегруженная функция отличается от "const char *strrchr(const char *,int)" только возвращаемым типом
    
    1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h(193): см. объявление "strrchr"
    1>F:\tinybasic\smalllibc\kosSyst.h(121): error C2373: strrchr: переопределение; различные модификаторы типа
    
    1>f:\tinybasic\console.c(17): error C2365: printf: переопределение; предыдущим определением было "функция"
    1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(285): см. объявление "printf"
    Из хаоса в космос
  • Не использовать стандартные библиотеки. В gcc это лечится ключами -nostdinc -nostdlib. Еще можно переименовать функции в console.c, но это надолго.
  • А чем плохи стандартные strlen и strrchar?
    Из хаоса в космос
  • Тем, что используют winapi, если ты про MSVC, или linux libc, если про gcc|clang.
  • Не обязательно libc, в gcc они ещё и встроенные бывают, вот те - самые годные.
    Хотя, в MSVC тоже встроенные некоторые есть.
  • Правильно ли я понимаю, что в Kolibri окно приложения может быть и максимизировано, и минимизировано одновременно?
  • А что тут такого? В винде же когда сворачиваешь развёрнутое на весь экран окно, а потом его восстанавливаешь, то оно снова на весь экран.
  • Code: Select all

    Параметры:
      * eax = 14 - номер функции
    Возвращаемое значение:
      * eax = [xsize]*65536 + [ysize], где
      * xsize = x-координата правого нижнего угла экрана =
                размер по горизонтали - 1
      * ysize = y-координата правого нижнего угла экрана =
                размер по вертикали - 1
    

    Code: Select all

    inline fastcall int GetScreenWidth()
    {
    	$mov eax, 14
    	$int 0x40
    	$shr eax, 16
    }
    
    inline fastcall int GetScreenHeight()
    {
    	$mov eax, 14
    	$int 0x40
    }
    Каждый раз возвращается еах. Почему GetScreenWidth() возвращает 799 а GetScreenHeight() не 599, а огромное число типа 52368368?
    Из хаоса в космос
  • Потому что, как и написано в справке, возвращается eax = [xsize]*65536 + [ysize], в первой функции сдвигом оставляется только [xsize], во второй функции обработки нет и возвращается полное число.
    Чтобы получить [ysize] надо взять от EAX только AX, или сделать $and eax,0x0000FFFF или ещё как-нибудь оставить только младшие байты.
  • Фак мой моск... то есть спасибо. Я сейчас учебник по асму почитываю, до этого ещё не дошёл.
    Из хаоса в космос
  • Странно, обычно логические операции с битовыми масками рассказываются в начале книжек.
  • ru.wikibooks.org/wiki/Ассемблер_в_Linux_для_программистов_Си :)
    Из хаоса в космос
  • Помогите с массивами, а точнее как происходит индексация и как обращатся к элементам?
    to infinity and beyond
  • Хотелось уточнить, что всё-таки делает функция 18.10?
    То, что написано в Wiki:
    Сворачивает собственное окно.
    или же то, что сказал art_zh:
    18.10 предполагает, что у активного приложения и окно - активное.
    Его и сворачивают.
    При нажатии на кнопку минимизации вызывается она же?

    Запускаем приложение, использующее OpenDialog(TinyPad, HeEd, ...).
    Запускаем из этого приложения OpenDialog.
    Пытаемся свернуть окно самой программы нажатием на кнопку минимизации, но после нажатия отпускаем кнопку мыши не сразу, а немного ждём.
    В этот момент может свернуться окно OpenDialog, а не окно самой программы.

    И с кнопкой закрытия такая же ситуация.
  • Who is online

    Users browsing this forum: No registered users and 4 guests