Проект Комментария к "Win32 API Tutorial" by Iczelion

Тема в разделе "WASM.PROJECTS", создана пользователем kero, 20 июн 2008.

  1. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
  2. mega_t72

    mega_t72 New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2009
    Сообщения:
    9
    еще ближе подобрался к этому идентификатору,
    случайно просто напоролся, когда поднимал тему шаблонов из MSDN:
    получается, что этот идентификатор - либо атом какого-нить глобального класса, типа диалога,
    либо индекс из набора:
    который, по идее можно расширить, до попапов, чтобы включить все эти "predefined system window class"
    т.е. скорее всего поле CLASS в этом качестве небесполезно, но именно той пользы, которую я от него ждал похоже не будет, т.к. "predefined" и "system" сразу отбивают всякое желание мучить его дальше
     
  3. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    1. по моему ошибка в 5 уроке - фонт создаётся в секции PAINT... но это значит что он будет создаваться как бы по новой при каждой перерисовке окна?

    переделал :
    Код (Text):
    1.                                .ELSEIF uMsg==WM_CREATE
    2. invoke CreateFont,
    3. 18,0,0,0,0,0,0,0,  
    4. ANSI_CHARSET,
    5. OUT_DEFAULT_PRECIS,
    6. CLIP_DEFAULT_PRECIS,
    7. DEFAULT_QUALITY,DEFAULT_PITCH,
    8. ADDR FontName
    9.  mov     hfont,eax                             
    10.                                .ELSEIF uMsg==WM_PAINT
    11.  invoke  BeginPaint,hWnd, ADDR ps
    12.  mov     hdc,eax
    13.  
    14.  invoke  SelectObject, hdc, hfont
    15.  
    16.  ; RGB     0,0,0
    17.  ; invoke  SetTextColor,hdc,eax
    18.  
    19.  RGB     240,240,228
    20.  invoke  SetBkColor,hdc,eax
    21.  
    22.  invoke  TextOut,hdc,200,100,ADDR TestString,SIZEOF TestString
    23.        
    24.  invoke  EndPaint,hWnd, ADDR ps
    так вроде бы более корректно

    2. есть упоминание, что класс окна регистрируется один раз - тогда, если вы создаёте несколько дочерних окон одного класса - лучше вывести регистрацию из тела функции в секцию CREATE - ... если приходится регистрировать несколько классов, можно написать макрос ....
     
  4. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Blackbeam
    Никогда не смотрел этот урок...
    Да - жутчайшая утечка фонта :)
    Между
    invoke SelectObject,hdc, hfont
    и
    invoke EndPaint,hWnd, ADDR ps
    выпала строчка
    invoke DeleteObject,eax .

    Но, конечно, нелепо бесконечно воссоздавать один и тот же фонт :)
     
  5. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    mega_t72
    Я, кажется, утерял красную нить ваших поисков...
    Вы предполагали, что в шаблоне диалога должно быть местечко для кастомных атомов, или что?

    ------
    +
     
  6. mega_t72

    mega_t72 New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2009
    Сообщения:
    9
    да, конечно, нить все та же, но похоже нет этого местечка, по крайней мере для "кастомных" атомов
     
  7. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Blackbeam, так, оказывается, народом васма о сем уже сказано, см. комментарии к уроку, зря мы тут старались :)

    --------
    [upd: 2010-12-19]

    [​IMG]
     
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.780
    Я с этим столкнулся здесь, когда выводил в окошко вращающуюся надпись, там фонт создается через 50 мсек с поворотом на 0,1 градус, через 2 минуты количество фонтов уже исчерпано поэтому invoke DeleteObject,[newf];возвращаем системе старый шрифт
    invoke SelectObject,[hdc],[oldf]
    кстати, не стоит заводить на hdc отдельную переменную если уже есть PAINTSTRUCT, то hdc можно брать из PAINTSTRUCT.hdc
    PS. Не верю своим глазам? О боги, Вы услышали мольбы обитателей WASM.RU/FORUM и вернули редактирование!!!