Archived

This topic is now archived and is closed to further replies.

kavalants

Rich edit control trouble...................................

Recommended Posts

Hey! Can somebody tell me, what''s wrong with this code? I get an error when I try to create the Rich Edit control with CreateWindowEx(...). I''m using MinGW.
//*******************************************************************************************

// FAILI NIMI: rich.cpp

// FAILI KIRJELDUS: Rich Editi test

// AUTOR: Kavalants

// LOOMISE KUUPÄEV: 17.11.2003

// VIIMANE MUUDATUS: 17.11.2003

//*******************************************************************************************

#define WIN32_LEAN_AND_MEAN
//Windowsi API tüüpe kontrollitakse rangelt nagu tavalisi C++''i omi

#define STRICT



//-------------------------------------------------------------------------------------------

//	INCLUDE FAILID

//-------------------------------------------------------------------------------------------

//tavaline windowsi kraam

#include <windows.h>
//rich edit kontrolli jaoks

#include <richedit.h>



//-------------------------------------------------------------------------------------------

// GLOBAALSED MUUTUJAD

//-------------------------------------------------------------------------------------------

HINSTANCE hInst = NULL;									//programmi viit

HWND hWnd = NULL;										//viit peaaknale

HMODULE hRichEditDll = NULL;							//rich edit kontrolli dll''i viit

HWND hRichEdit = NULL;									//rich edit kontrolli viit


int RICH_EDIT = 10000;									//rich edit kontrolli id kood


const char wndClass[] = "MainWndClass";				//peaakna klassi nimi

const char wndName[] = "Rich Editi test";							//peaakna nimi/pealkiri


bool done = false;										//programmi staatus




//-------------------------------------------------------------------------------------------

// FUNKTSIOONIDE PROTOTÜÜBID

//-------------------------------------------------------------------------------------------

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);	//põhiline teadete töötleminse

														//funktsioon

void Error(char *errMsg, bool);							//kuvab errori teate




//-------------------------------------------------------------------------------------------

// PROGRAMMI ALGUS

//-------------------------------------------------------------------------------------------


// Funktsioon:	WinMain

// Tagastab:	int

// Tüüp:		Programmi algus ja lõpp.

// Argumendid:	HINSTANCE hInstance - Windowsi poolt antud programmi viit

//				HINSTANCE hPrevInstance - Jääk Win16 ajast. Alati 0.

//				LPSTR lpCmdLine - käsurea parameetrid ilma programmi faili nimeta

//				int nCmdShow - akna kuvamise moodus

// Kirjeldus:	Programmi algus. Registreerime akna klassi. Loome akna. Kuvame akna.

//				Siseneme teadete luupi. Teadete luubist väljudes väljume programmist.

//-------------------------------------------------------------------------------------------

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	MSG msg;													//teateid sisaldav muutuja

	WNDCLASSEX wc;												//peaakna klass


	//nullistame mälu, et erroreid vältida

	ZeroMemory(&msg, sizeof(MSG));
	ZeroMemory(&wc, sizeof(WNDCLASSEX));

	hInst = GetModuleHandle(NULL);								//saame programmi viida


	//täidame akna klassi

	wc.cbSize = sizeof(WNDCLASSEX);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = WndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hInst;
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
	wc.lpszMenuName = NULL;
	wc.lpszClassName = wndClass;

	//error kui klassi registreerimine ebaõnnestus

	if(!RegisterClassEx(&wc))
	{
		Error("Error registering window class.", TRUE);
	}

	//loome akna

	hWnd = CreateWindowEx(	0,
							wndClass, wndName,
							WS_OVERLAPPEDWINDOW,
							10, 10, 640, 480,
							NULL, NULL, hInst, NULL);

	//error kui akna loomine ebaõnnestus

	if(hWnd == NULL)
	{
		Error("Could not create window.", TRUE);
	}

	//kuvame akna

	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);
	
	//laeme rich edit kontrolli dll''i

	hRichEditDll = LoadLibrary("Riched20.dll");
	
	//error kui rich edit kontrolli dll''i laadimine ebaõnnestus

	if(hRichEditDll == NULL)
	{
		Error("Could not load Rich Edit 3.0 control dll.", TRUE);
	}

	//teadete töötlemine süsteem

	//kontrollime, kas meile teateid on

	//kui jah, siis võtame teate vastu

	//väljume, kui teade on WM_QUIT

	while(!done)
	{
		if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else if(msg.message == WM_QUIT)
		{
			done = true;
		}
	}
	
	//vabastame rich edit kontrolli dll''i

	FreeLibrary(hRichEditDll);

	//tühistame akna klassi registratsiooni

	UnregisterClass(wndClass, hInst);

	//väljume programmist

	return msg.wParam;
} // END WinMain(...)



// Funktsioon:	WndProc

// Tagastab:	LRESULT

// Tüüp:		Callback funktsioon.

// Argumendid:	HWND hwnd - Viit aknale, millelt teade tuli.

//				UINT msg - Teate kood.

//				WPARAM wParam - Teatega kaasta tulev info. Võib olla 0.

//				LPARAM lParam - Teatega kaasta tulev info. Võib olla 0.

// Kirjeldus:	Programmi põhiline teadete töötlemise funktsioon. Töötleme vajalikke teateid.

//				Kui tuleb teade, mida me ei taha töödelda, siis kutsume DefWindowProc(...),

//				mis töötleb selle teate meie eest. Kui töötlesime mõnda teadet, siis

//				tagastame nulli.

//-------------------------------------------------------------------------------------------

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch(msg)
	{
		case WM_CREATE:
		{
			//loome rich edit kontrolli

			hRichEdit = CreateWindowEx(	WS_EX_CLIENTEDGE,
										"richedit_class",
										"123",
										WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_MULTILINE,
										0,
										0,
										100,
										100,
										hwnd,
										(HMENU)RICH_EDIT,
										hInst,
										NULL);
										
			//error kui rich edit kontrolli loomine ebaõnnestus

			if(hRichEdit == NULL)
			{
				Error("Could not create rich edit control.", TRUE);
			}
		}
		break;
		case WM_QUIT:
		{
			DestroyWindow(hwnd);
		}
		break;
		case WM_DESTROY:
		{
			PostQuitMessage(0);
		}
		break;
		default:
		{
			return DefWindowProc(hwnd, msg, wParam, lParam);
		}
	}

	return 0;
} //END WndProc(...)



// Funktsioon:	Error

// Tagastab:	void

// Tüüp:		Tavaline.

// Argumendid:	std::string errMsg - Errori string.

//				bool quit - Kas väljume peale errorit programmist või mitte.

// Kirjeldus:	Kuvab soovitud errori ekraanile tavalises message box''is. Olenevalt

//				parameeter quit''i väärtusest kas lõpetame programmi või jätkame peale

//				errorit.

//-------------------------------------------------------------------------------------------

void Error(char *errMsg, bool quit)
{
	if(quit == TRUE)
	{
		MessageBox(NULL, errMsg, "ERROR", MB_OK);

		SendMessage(hWnd, WM_DESTROY, 0, 0);
	}
	else
	{
		MessageBox(NULL, errMsg, "ERROR", MB_OK);
	}
} //END Error(...)


//*******************************************************************************************

// END rich.cpp

//*******************************************************************************************


Share this post


Link to post
Share on other sites