Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2012, 00:09   #1
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
По умолчанию Поток очистить?

Вывожу текст на экран, кроме того что я вывожу почему-то выводится ещё какой-то мусор. Почему так? Что делать с этим? Может надо как-то поток почистить перед выводом?

Код:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
static TCHAR szWindowClass[] = _T("win32app");
static TCHAR Window[] = _T("win32childapp");
static TCHAR szTitle[] = _T("Win32 Guided Tour Application");
HINSTANCE hInst;
BOOL RC(WNDPROC, LPCTSTR, UINT);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//функция оконной процедуры
 
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)  ///главная функция
{
    hInst=hInstance;
    if(!RC(WndProc,szWindowClass,COLOR_WINDOW)) return FALSE;
 
HWND hWnd = CreateWindow(
    szWindowClass,
    szTitle,
    WS_OVERLAPPEDWINDOW|WS_VISIBLE,
    CW_USEDEFAULT, CW_USEDEFAULT,
    400, 400,
    NULL,
    NULL,
    hInstance,
    NULL
);

if (!hWnd)
{
    MessageBox(NULL,
        _T("Call to CreateWindow failed!"),
        _T("Win32 Guided Tour"),
        NULL);
 
    return FALSE;
}
 
ShowWindow(hWnd,
    nCmdShow);
UpdateWindow(hWnd);
 
//цикл обработки сообщений отправляемых ОС
 
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return (int) msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)//добавляем функциональные возможности
{
    PAINTSTRUCT ps;
    //TCHAR greeting[] = _T("Zaharova Anna");
	HDC hDC;

	//String str = "Приветствие!!";
	char* text[6] =
		{ "Приветствие",
		  "Приветствие",
		  "Приветствие",
		  "Приветствие",
		  "Приветствие",
		  "Приветствие"
		};

	int x = 20, y = 20;
	SIZE size;
	HFONT hNFont, hOFont;
	int nWidth, i, j;
    switch (message)
    {
		case WM_PAINT:
		static LOGFONT lf;
		hDC = BeginPaint(hWnd, &ps);
		lf.lfCharSet=DEFAULT_CHARSET;
		lf.lfPitchAndFamily=DEFAULT_PITCH;
		lf.lfHeight=1;
		lf.lfWeight=FW_BOLD;
		GetTextExtentPoint32A(hDC, text[5], strlen(text[5]), &size);
		nWidth = size.cx;
		for (j=0;j<2; j++)
		{
			for (i = 0; i < 6; i++)
			{
		 hNFont=CreateFontIndirect(&lf);
		 hOFont=(HFONT)SelectObject(hDC,hNFont);
				SetTextColor(hDC, RGB(i*15,i*40,i*85));
				lf.lfHeight=i*5;
				TextOutA(hDC, x, y, text[i], nWidth);
				y += size.cy + 20;
			}
			x += size.cx + 40;//180
			y = 20;
		}
		
		x += size.cx + 180;
			for (i = 0; i < 6; i++)
			{
		 hNFont=CreateFontIndirect(&lf);
		 hOFont=(HFONT)SelectObject(hDC,hNFont);
				SetTextColor(hDC, RGB(i*15,i*40,i*85));
				lf.lfHeight=50-(i*5);
				TextOutA(hDC, x, y, text[i], nWidth);
				y += size.cy + 20;
			}

		SelectObject(hDC,hOFont);
		DeleteObject(hNFont);
		EndPaint(hWnd, &ps);
		break;

    case WM_DESTROY:
		PostQuitMessage(0);
		break;

        default:return DefWindowProc(hWnd, message, wParam, lParam);break;
	}
return 0;
}

BOOL RC(WNDPROC WndProc, LPCTSTR Name, UINT brBackground)
{
    
WNDCLASS wc = { 0 }; 
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
    wc.lpfnWndProc=WndProc; //указывает на функцию окна
    wc.hInstance=hInst; //указывает на дескриптор текущего приложения
    wc.hIcon=LoadIcon(hInst,MAKEINTRESOURCE(IDI_APPLICATION)); //иконка
    wc.hCursor=LoadCursor(NULL, IDC_ARROW); //курсор
    wc.hbrBackground=(HBRUSH)( brBackground +1); //  задает дескриптор кисти закрашивания фона окна
    wc.lpszMenuName=NULL; // имя 
    wc.lpszClassName=Name; //имя класса окон
return (RegisterClass(&wc)!=0);
}
PinkPink вне форума Ответить с цитированием
Старый 03.10.2012, 00:34   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Поток очистить?
не надо ничего чистить
Просто внимательно читаем описание используемых функций и параметров:

GetTextExtentPoint32
Цитата:
lpSize [out]
A pointer to a SIZE structure that receives the dimensions of the string,in logical units.
TextOut
Цитата:
cchString [in]
The length of the string pointed to by lpString, in characters.
Вам нужно указать длину строки в символах, а не в логических единицах.
Код:
nWidth=strlen(text[i]);
TextOutA(hDC, x, y, text[i], nWidth);
counter вне форума Ответить с цитированием
Старый 03.10.2012, 00:42   #3
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
не надо ничего чистить
Просто внимательно читаем описание используемых функций и параметров:

GetTextExtentPoint32


TextOut


Вам нужно указать длину строки в символах, а не в логических единицах.
Код:
nWidth=strlen(text[i]);
TextOutA(hDC, x, y, text[i], nWidth);
спасибо) как раз подумала, что дело с этим параметром, что если размер не будет соответствовать - будет вылазить какой-то мусор.
но дальше этого пока мысль не ушла) ваше решение тем более ко мне не приходило))
PinkPink вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
очистить формат nelvin Microsoft Office Word 1 01.09.2011 04:19
Очистить XML Utkin C# (си шарп) 4 16.06.2011 10:46
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40
Очистить файл С++ noob_11 Помощь студентам 1 13.05.2010 22:41