Шаг 27 - Реализуем функцию WriteText

Мы с Вами напишем функцию, которая будет выводить текст на вторичную поверхность, посмотреть результат можно будет переключившись на нее. Ведь у нас это реализовано. Вот так будет выглядеть результат.

27_1.gif (1148 b)

Visual Basic
Visual C++

Visual Basic

Добавляем описание функции TextOut

'WIN32 API SECTION
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal_
	hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String,_
	ByVal nCount As Long) As Long
'END WIN32 API SECTION

Private PrimarySurf As DirectDrawSurface7
.........

Добавляем метод WriteText

Public Function WriteText() As Boolean
On Error GoTo Errors:
	Dim s$
	Dim a As Long
	s$ = "Hello"
	a = SecondarySurf.GetDC
	' GDI в нашем распоряжении
	w = TextOut(a&, 0, 0, s$, Len(s$))
	'  больше не нужно нам  GDI
	SecondarySurf.ReleaseDC (a)
	WriteText = True
	Exit Function
Errors:
	WriteText = False
End Function

Вызовем этот метод при загрузке формы.

Private Sub Form_Load()
.........
If (DirectDrawClass.WriteText() = False) Then
End
End If
End Sub

Да маленькая мелочь, при возвращении нормального режима лучше передавать HWND формы.

Private Sub Class_Terminate()
objDirectDraw.RestoreDisplayMode
objDirectDraw.SetCooperativeLevel DirectDraw.hWnd, DDSCL_NORMAL
.............
End Sub

Ну а результат Вы уже видели.

Visual C++

Добавляем функцию WriteText

BOOL CDirectDraw::WriteText()
{
	HDC hdc;
	HRESULT hr;
	hr = SecondarySurf->GetDC(&hdc);
	if(hr!=DD_OK) return FALSE;
	// GDI в нашем распоряжении
	::TextOut(hdc, 0, 0, "Hello ", 5);
	// больше не нужно нам GDI
	SecondarySurf->ReleaseDC(hdc);    
	return TRUE;
}

Вызовем эту функцию при загрузке диалога.

BOOL CDirectDlg::OnInitDialog()
{
	.......
	if (cDirecDraw.WriteText () !=TRUE)
	{
		return FALSE;
	}
	return TRUE;  // return TRUE  unless you set the focus to a control
}

Да маленькая мелочь, при возвращении нормального режима лучше передавать HWND диалога.

CDirectDraw::~CDirectDraw()
{
	lpDD->RestoreDisplayMode();
	lpDD->SetCooperativeLevel(AfxGetMainWnd()->GetSafeHwnd(),DDSCL_NORMAL );  
	if (SecondarySurf!=NULL)
		SecondarySurf->Release(); 
	//......
}

Ну, а результат Вы уже видели.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 28.04.2002