Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 31.05.2013
Сообщений: 10
1

Регистрация окна Windows в динамической памяти

25.10.2013, 00:36. Показов 999. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
всем привет.
я понимаю, что это может и не интересно но все же
вот стандартная регистрация окна
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  ;==================================================
        ; Fill WNDCLASSEX structure with required variables
        ;==================================================
 
        mov wc.cbSize,         sizeof WNDCLASSEX
        mov wc.style,          CS_HREDRAW or CS_VREDRAW \
                               or CS_BYTEALIGNWINDOW
        mov wc.lpfnWndProc,    offset WndProc
        mov wc.cbClsExtra,     NULL
        mov wc.cbWndExtra,     NULL
        m2m wc.hInstance,      hInst   ;<< NOTE: macro not mnemonic
        mov wc.hbrBackground,  COLOR_BTNFACE+1
        mov wc.lpszMenuName,   NULL
        mov wc.lpszClassName,  offset szClassName
          invoke LoadIcon,hInst,500    ; icon ID
        mov wc.hIcon,          eax
          invoke LoadCursor,NULL,IDC_ARROW
        mov wc.hCursor,        eax
        mov wc.hIconSm,        0
 
        invoke RegisterClassEx, ADDR wc
мы ее немного изменим
в eax выделенная память в размере структуры WNDCLASSEX
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
   
    
        push edi
        assume edi:ptr WNDCLASSEX
        mov edi,eax
        mov [edi].cbSize,         sizeof WNDCLASSEX
        mov [edi].style,          CS_HREDRAW or CS_VREDRAW \
                               or CS_BYTEALIGNWINDOW
        mov [edi].lpfnWndProc,    offset WndProc
        mov [edi].cbClsExtra,     NULL
        mov [edi].cbWndExtra,     NULL
        m2m [edi].hInstance,      hInst   ;<< NOTE: macro not mnemonic
        mov [edi].hbrBackground,  COLOR_BTNFACE+1
        mov [edi].lpszMenuName,   NULL
        m2m [edi].lpszClassName,  ClassName ;offset szClassName
          
        invoke LoadIcon,hInst,99    ; icon ID
       
        mov [edi].hIcon,       eax
      
        invoke LoadCursor,NULL,IDC_ARROW
          
        mov [edi]. hCursor,        eax
        mov [edi].hIconSm,        0
       pop edi
наше окошко теперь не статической выделено памяти и загрузка происходит в динамической
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2013, 00:36
Ответы с готовыми решениями:

Windows инициировала точку останова при очистке динамической памяти
Собственно код, для самообразования перебрасывал адреса динамического массива в функции и издевался...

Должен ли общий объем графической памяти складываться из зарезервированной (фиксированной) памяти и динамической (DVMT)?
Здравствуйте. Скажите, должен ли общий объем графической памяти складываться из зарезервированной...

Массив в динамической памяти
Помогите написать прогу в динамической памяти #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #define N...

Перераспределение динамической памяти
дан двумерный массив 3х5 выделить динамически память под него, затем перераспределить ее в массив...

2
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,696
25.10.2013, 03:16 2
Цитата Сообщение от ADoGind1 Посмотреть сообщение
в eax выделенная память в размере структуры WNDCLASSEX
интересно, если бы ты показал еще и кусок программы по выделению памяти, но я сделал проще ― Переворачиваем структуру WNDCLASS "вверх ногами" и помещаем ее в стек, как параметры передаваемые функции RegisterClassA. Значения, возвращаемые функциями LoadCursor и LoadIcon, мы посмотрим заранее. Так как курсор и иконка передаваемые нами соответствуют стандартной стрелочке и стандартной иконке, то их идентификаторы предопределены и не изменяются, то есть набора стандартных системных иконок и курсоров одни и те же, и в Win98 и WinXp. Поэтому мы и не используем LoadCursor и LoadIcon. Последним параметром в стек отправляется содержимое регистра esp указатель на структуру WNDCLASSA
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
; заполнение структуры wc и регистрация класса
    xor ebx,ebx
    mov edi,offset wTitle; Имя нашего класса окна и имя окна
    push edi;lpszClassName: Имя класса окна
   push ebx;lpszMenuName: Хэндл меню для окон, созданных из класса по умолчанию.
    push COLOR_WINDOW+1;hbrBackground: Цвет фона 
    push 10011h;hCursor: Хэндл курсора 
    push ebx;hIcon: Хэндл иконки
    push 400000h;hInstance: Хэндл модуля.
    push ebx;cbWndExtra
    push ebx;cbClsExtra
    push offset window_procedure;lрfnWndProc: Адрес процедуры окна, 
;ответственной за окна, создаваемых из класса
    push ebx;style: Стиль окон, создаваемых из этого класса. 
    push esp;адрес структуры WNDCLASSEX
    call RegisterClass; регистрация нашего класса окна
;После регистрации класса окна, мы должны вызвать CreateWindowEx, 
;чтобы создать наше окно, основанное на этом классе
в конце концов в результате получаю приложение, которое выводит окошко величиной 206 байт ― более подробно всё расписано здесь
0
1 / 1 / 0
Регистрация: 31.05.2013
Сообщений: 10
25.10.2013, 03:41  [ТС] 3
Цитата Сообщение от Mikl___ Посмотреть сообщение
интересно, если бы ты показал еще и кусок программы по выделению памяти,
Привет. Мики я использую стандартную функцию crt_malloc из msvcrt.inc так эта Dll есть в пакете Windws в чем проблема.
Цитата Сообщение от Mikl___ Посмотреть сообщение
Так как курсор и иконка передаваемые нами соответствуют стандартной стрелочке и стандартной иконке, то их идентификаторы предопределены и не изменяются, то есть набора стандартных системных иконок и курсоров одни и те же, и в Win98 и WinXp.
ну вот по поводу курсора соглашусь, а вот иконки можно использовать свои.
Хотя спасибо за еще один пример.
0
25.10.2013, 03:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2013, 03:41
Помогаю со студенческими работами здесь

Перераспределение динамической памяти
дан двумерный массив 3х5 выделить динамически память под него, затем перераспределить ее в массив...

Теория по динамической памяти
Предположим, применяется оператор new в форме для массива: p=new int ;. n ведь может быть и...

Выделение динамической памяти
Добрый вечер. Помогите разобраться пожалуйста! Суть такова: есть файл, в нем есть данные, мне надо...

Выделение динамической памяти
Доброго времени суток! я начинающий программист, столкнулась с такой проблемой: выделяю память...

Использование динамической памяти
Всем доброго времени суток. Читаю книгу &quot;Основы программирования&quot; Иванова Г.С. и наткнулся на...

Переменная в динамической памяти
class SimpleCircle { public: SimpleCircle (); //Basic constructor SimpleCircle (int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru