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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2011, 22:26   #1
xripunov
 
Регистрация: 23.11.2010
Сообщений: 9
Восклицание EditBox

Ребят, помогите. Не могу разобраться с эдитбоксом.. Почитал темы, вроде делаю все, как пишут, но не работает. Подскажите, в чем дело.
Код:
#include <windows.h>
#pragma comment(linker,"\"/manifestdependency:type='win32' 
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' 
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

static int xtext, ytext;
LPTSTR lpString=L"А я банан";

int len;
bool flag=false;


#define IDC_MAIN_EDIT	102		

HWND hEdit;

LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR     lpCmdLine,
	int       nCmdShow)
{
	HWND hwnd;
	HWND hText;
	MSG msg;
	WNDCLASS w;
	memset(&w, 0, sizeof(WNDCLASS));
	w.style = CS_HREDRAW | CS_VREDRAW;
	w.lpfnWndProc = WndProc;
	w.hInstance = hInstance;
	w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	w.lpszClassName = L"My Class";
	RegisterClass(&w);
	hwnd = CreateWindow
		(L"My Class", L"Типа окно", WS_OVERLAPPEDWINDOW,
		300, 200, 800, 600, NULL, NULL, hInstance, NULL);

	HWND hEdit=CreateWindowEx(WS_EX_CLIENTEDGE,
		L"EDIT",
		L"Хеллоу ворлд!",
		WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_MULTILINE,
		200,
		15,
		200,
		20,
		hwnd,
		(HMENU)IDC_MAIN_EDIT,
		GetModuleHandle(NULL),
		NULL);

	HGDIOBJ hfDefault=GetStockObject(DEFAULT_GUI_FONT);
	SendMessage(hEdit,
		WM_SETFONT,
		(WPARAM)hfDefault,
		MAKELPARAM(FALSE,0));
	SendMessage(hEdit,
		WM_SETTEXT,
		NULL,
		NULL);

	// Create a push button
	HWND hWndButton=CreateWindowEx(NULL,
		L"BUTTON",
		L"Тынц",
		WS_TABSTOP|WS_VISIBLE|
		WS_CHILD,
		420,
		10,
		80, 30,
		hwnd,
		(HMENU)10005,
		GetModuleHandle(NULL),
		NULL);


	
	ShowWindow(hwnd,nCmdShow);
	UpdateWindow(hwnd);

	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}


	return msg.wParam;
}

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
	HDC hdc;
	HFONT hf; 
	static LOGFONT font; 
	PAINTSTRUCT ps; 

	switch (Message){

	case WM_COMMAND:
		
		if(LOWORD(wparam)==10005)
		{

			int len = GetWindowTextLength( GetDlgItem(hEdit, IDC_MAIN_EDIT) ); 
			if(len > 0)
			{
				GetWindowText(hEdit,lpString,len); 

			}

		}

		break;


	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);

		hf = CreateFontIndirect(&font);
		SelectObject(hdc, hf);

		TextOut(hdc, xtext, ytext, lpString,9);

		DeleteObject(hf);
		EndPaint(hwnd, &ps);

		break;

	case WM_DESTROY: 
		PostQuitMessage(0);
		break;
	case WM_SIZE:
		InvalidateRect(hwnd,NULL,true);
		break;

	case WM_CREATE:
		font.lfHeight = 30;
		font.lfWidth = 0; 
		font.lfEscapement = 0;
		font.lfOrientation = 0;
		font.lfWeight = 0; 
		font.lfItalic = 0;
		font.lfUnderline = 0;
		font.lfStrikeOut = 0;
		font.lfCharSet = DEFAULT_CHARSET;
		font.lfOutPrecision = OUT_DEFAULT_PRECIS;
		font.lfClipPrecision = CLIP_DEFAULT_PRECIS;
		font.lfQuality = DEFAULT_QUALITY;
		font.lfPitchAndFamily = VARIABLE_PITCH | FF_DONTCARE;
		strcpy((char*)font.lfFaceName, "Arial");

		xtext = 100, ytext = 100;
		break;

	default:
		return DefWindowProc(hwnd, Message, wparam, lparam);
	}


	return 0;
}

Последний раз редактировалось rpy3uH; 01.06.2011 в 08:43.
xripunov вне форума Ответить с цитированием
Старый 31.05.2011, 22:38   #2
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

А можно сказать, что именно-то нужно?
Spawn™Production® вне форума Ответить с цитированием
Старый 31.05.2011, 22:40   #3
xripunov
 
Регистрация: 23.11.2010
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Spawn™Production® Посмотреть сообщение
А можно сказать, что именно-то нужно?
DrawOut в WM_PAINT должен рисовать текст из EditBox при нажатии кнопки "Тынц"
xripunov вне форума Ответить с цитированием
Старый 31.05.2011, 23:45   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
GetDlgItem(hEdit, IDC_MAIN_EDIT)
это что за хрень?
у вас итак есть хендл эдита.

Код:
hf = CreateFontIndirect(&font);
достаточно один раз в WM_CREATE(и запомнить хендл), потом в WM_DESTROY снести его.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.05.2011, 23:52   #5
xripunov
 
Регистрация: 23.11.2010
Сообщений: 9
По умолчанию

Все заработало, стоило вместо LPWSTR взять тип WCHAR. Всем спасибо.
xripunov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить сообщения с EditBox в диалоговом окне WinApi Gillian Foster Visual C++ 5 19.04.2011 20:52
задать массив типа X: array [0..N] of integer -где N переменная читаеться из EditBox Kivin13 Общие вопросы Delphi 22 06.09.2007 09:25