Форум программистов, компьютерный форум CyberForum.ru

кто нибудь знает?(про винмэйн) - C++

Восстановить пароль Регистрация
 
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
22.07.2011, 19:01     кто нибудь знает?(про винмэйн) #1
кто нибудь знает как, например в мфс инкапсулированы такие функции как winmain и windowproc в тело класса, что выполнение начинается успешно? Я это к чему. тут пишу к качестве тренировке виндузячую игрушку реверси и так сказать решил все по науке. логика отдельно интерфейс отдельно. но увы не смог избавиться от глобальных winmain, windowproc.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.07.2011, 19:09     кто нибудь знает?(про винмэйн) #2
AzaKendler, сделай их статическими
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
22.07.2011, 19:12  [ТС]     кто нибудь знает?(про винмэйн) #3
Maxwe11, вот блин. как все просто то. а как тогда будет выглядеть точка входа в прогу?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.07.2011, 19:27     кто нибудь знает?(про винмэйн) #4
хм...вот щас посомтрел свои древнии исходники, WinMain инкапсулировать не получится, ну вообщем так же как и main, а процедуру окна можно сделать либо статической, либо передавать в класс указатель на эту процедуру
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
22.07.2011, 19:42  [ТС]     кто нибудь знает?(про винмэйн) #5
хреново(. а как в библиОтеках это реализовано? стартуют классы Capplication Cwnd по моему и где то там стартует вин мэйн. Как они там это дело спрятали интересно...
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.07.2011, 20:17     кто нибудь знает?(про винмэйн) #6
автоматическая генерация кода
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
22.07.2011, 20:48     кто нибудь знает?(про винмэйн) #7
Цитата Сообщение от AzaKendler Посмотреть сообщение
кто нибудь знает как, например в мфс инкапсулированы такие функции как winmain и windowproc в тело класса, что выполнение начинается успешно? Я это к чему. тут пишу к качестве тренировке виндузячую игрушку реверси и так сказать решил все по науке. логика отдельно интерфейс отдельно. но увы не смог избавиться от глобальных winmain, windowproc.
Посмотри на эту тему книжку Юрия Щупака. Он там непосредственно в самом начале пишет Hello World тремя разными способами, в том числе и с помощью небольшой классовой обертки над функциями WinAPI
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
22.07.2011, 21:02     кто нибудь знает?(про винмэйн) #8
в Программирование графики для Windows (Фень Юань) помню было тоже подобное в создании класса окна
хотя я не вижу проблемы в WinMain создавать объект окна (приложения) и через конструктор передавать параметры точки входа
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
22.07.2011, 21:39     кто нибудь знает?(про винмэйн) #9
Цитата Сообщение от Maxwe11 Посмотреть сообщение
WinMain инкапсулировать не получится
Правильно говоришь, WinMain это ведь точка входа вызывается функцией WinMainCRTStartup runtime-билиотеки C, WinMain должнa быть глобальной как и обработчик сообщений WndProc, если к классу привязывать обработчик в виде статической функции то один фиг указатель будет глобальным для доступа к статической функции.
Вот наляпал прикол маленький.
C++
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
26
27
28
29
30
31
32
33
34
35
36
#include <windows.h>
 
 
extern "C"  void  WinMainCRTStartup(void) {
 
   WinExec("calc.exe", SW_SHOWDEFAULT);
   HWND  wnd = GetForegroundWindow();
 
   tagRECT  rect;
 
   GetWindowRect(wnd, &rect);
   SetWindowPos(wnd, HWND_TOPMOST,  
                        GetSystemMetrics(SM_CXSCREEN) / 2 - (rect.right - rect.left) / 2,
                        GetSystemMetrics(SM_CYSCREEN) / 2 - (rect.bottom - rect.top) / 2,
                       rect.right - rect.left, rect.bottom - rect.top, SWP_SHOWWINDOW);
   GetClientRect(wnd, &rect);
 
   HRGN   rgn  =  CreateEllipticRgn(rect.left, rect.top, rect.right, rect.bottom);
   SetWindowRgn(wnd, rgn, TRUE);
   DeleteObject(rgn);
 
   HDC   dc = GetDC(wnd);
    
   FillRect(dc, &rect, (HBRUSH)GetStockObject(BLACK_BRUSH));
 
   const TCHAR* str = "Hello Calculator !!!";
   tagSIZE  size;
   GetTextExtentPoint(dc, str, lstrlen(str), &size);
   SetBkMode(dc, TRANSPARENT);
   SetTextColor(dc, RGB(255, 255, 0));
   TextOut(dc, rect.right / 2 - size.cx / 2, rect.bottom  / 2 - size.cy * 2, str, lstrlen(str));
 
   ReleaseDC(wnd, dc);
 
   ExitProcess(0u);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2011, 21:50     кто нибудь знает?(про винмэйн)
Еще ссылки по теме:

C++ Преобразование времени (double. Может всё-таки кто-нибудь знает)
нужно сделать трассировку. кто-нибудь знает как? C++
C++ Всем добрый день! Кто-нибудь знает как исправить это?

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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
22.07.2011, 21:50     кто нибудь знает?(про винмэйн) #10
xAtom, помнится в WinMainCRTStartup производится инициализация переменных окружения и всякой всячины, возможно даже стандартной библиотеки, так что пример интересный но возможно имеет определенные подводные камни вроде неинциализированных глобальных объектов библиотек c и c++
Yandex
Объявления
22.07.2011, 21:50     кто нибудь знает?(про винмэйн)
Ответ Создать тему
Опции темы

Текущее время: 23:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru