![]() |
|
|
![]()
|
|
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Здравствуйте.
Хочю спросить так как на Visual C++ сделать, так как не работал серьезно, как сделать чтото на подобии как в Delphi TPaintBox. Если конкретней мне нужно получить указатель(bitamapа) и потом при помощи него рисовать на форме. Тоесть получить доступ к памяти которая хранит содержимое то что нарисовано на форме. Или на форму чтото положить и от этого получить. (Не работая с ресурсами) Как-бы мне тут сделать? |
|||
|
||||
| yurec |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
можно взять СDC и им ( по нему ) ) рисовать
|
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
yurec, а как его заюзать, можешь пример кода привести
|
|||
|
||||
| yurec |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
void CtestMFCView::OnMouseMove(UINT i_nFlags,CPoint i_point)
{ CPoint & pointStart = GetDocument()->m_mouseClickPointStart; CPoint & pointFinish = GetDocument()->m_mouseClickPointFinish; if (0 != pointFinish.x) { if (MK_LBUTTON == i_nFlags) { CClientDC dc(this); dc.MoveTo(pointStart); COLORREF bkColor = dc.GetBkColor(); COLORREF penColor = RGB(200,0,0); CPen bkPen; bkPen.CreatePen(PS_SOLID,1,bkColor); dc.SelectObject(bkPen); dc.LineTo(pointFinish); CPen frontPen; frontPen.CreatePen(PS_SOLID,1,penColor); dc.SelectObject(frontPen); pointFinish = i_point; dc.LineTo(pointFinish); pointStart = pointFinish; } } } |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Не тут чтото нето.
Мне нужно получить Pointer И где сделать CtestMFCView::OnMouseMove я не представляю Я юзаю Microsoft Visual Studio 2005 и просто создал Win32 app. У меня простой каркас приложения. |
|||
|
||||
| yurec |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
MSDN:"Drawing in the Client Area
You use the BeginPaint and EndPaint functions to prepare for and complete the drawing in the client area. BeginPaint returns a handle to the display device context used for drawing in the client area; EndPaint ends the paint request and releases the device context. In the following example, the window procedure writes the message "Hello, Windows!" in the client area. To make sure the string is visible when the window is first created, the WinMain function calls UpdateWindow immediately after creating and showing the window. This causes a WM_PAINT message to be sent immediately to the window procedure. LRESULT APIENTRY WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint(hwnd, &ps); TextOut(hdc, 0, 0, "Hello, Windows!", 15); EndPaint(hwnd, &ps); return 0L; // Process other messages. } } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; hwnd = CreateWindowEx( // parameters ); ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); return msg.wParam; } " |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
yurec, я в курсе этого. Это нето что мне нужно.
Мне нужно получить указатель чтобы работать на прямую с памятью, а не с GDI. К Scanlinам если по другому. Это сообщение отредактировал(а) Ak47black - 6.7.2007, 16:28 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
А что ты будешь делать напрямую с памятю битмапа (если я правильно поняла)? Неужели по пикселам на экран выводить? Или по пикселам в битмапе рисовать? Не самая удачная идея. Объясни почетче, что именно тебе нужно, причем именно задачу, а не предполагаемый тобою способ решения.
-------------------- ... |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Earnest, работаю с Video драйвером и от него хочю вывести.
Указатель нужен что-бы скопировать туда память с другого места которая содержит изображение. |
|||
|
||||
| yurec |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
The BitBlt function performs a bit-block transfer of the color data corresponding to a rectangle of pixels from the specified source device context into a destination device context.
BOOL BitBlt( HDC hdcDest, // handle to destination DC int nXDest, // x-coord of destination upper-left corner int nYDest, // y-coord of destination upper-left corner int nWidth, // width of destination rectangle int nHeight, // height of destination rectangle HDC hdcSrc, // handle to source DC int nXSrc, // x-coordinate of source upper-left corner int nYSrc, // y-coordinate of source upper-left corner DWORD dwRop // raster operation code ); посмотри, может тебя похожая функция заинтересует |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
yurec, неа я знаю эти функции, но они не помогут.
Мне нужно получить указатель на изображение формы или на форму применить какойнибудь класс и от него получить указатель. На языке Delphi это выглядит вот так
OutputBitmap - TImage; |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ok, тогда вместо DDB-битмапа используй DIB-секцию. Все то же самое, можно выбирать в контекст и рисовать стандартными функциями, но у тебя будет также прямой доступ к памяти. См. CreateDIBSection
Добавлено через 3 минуты и 24 секунды Однако, то, что в Дельфи от тебя прикрыто, придется делать самому. Доступ непосредственно к экранной памяти, где лежит содержимое формы, ты никак не получишь. Ты должен создать ДИБ-секцию подходящего размера и совместимый контекст, скопировать туда форму (через BitBlt), и уж тогда делай с этой памятью что хочешь. -------------------- ... |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Да я понимаю что тут только из ring 0 можно работать. Лан потребность в использовании Visual C++ у меня щас отпала. Earnest, Спасибо за ответы. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |