Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Windows

Sivun loppuun

Meitsi [12.10.2003 17:50:51]

#

Voisko joku kirjottaa esimerkin, miten c++ssalla saa win-apia käyttämällä ikkunan auki ja sinne tekstiä. Sen pitäis kääntyä Devc++:ssalla. Olen ettinyt kirjastosta varmaan jokasen kirjan joka käsittelee aihetta mutta ei toimi. ne on kaikki visual c++ssalle ja oon yrittäny jättää kmaiken hötön pois mitä niissä on, muitta kun ei kieltä osaa niin on kai turha yrittää arvailla. Vinkkiä kiitos!

odys [12.10.2003 21:08:37]

#

http://cpp.mureakuha.com/ Sieltä saat toimivan esimerkin ja paljon muuta ryönää.

Meitsi [14.10.2003 15:17:00]

#

Giitos paljon. ...mutte miten sinne ikkunaan voi kirjoittaa? Täytyypäs lukea joku kirja! :-P

odys [14.10.2003 15:23:58]

#

No yksi tapa on luoda STATIC kontrolli CreateWindow() -funkkaria käyttämällä ja laittaa siihen tekstiä käyttäen SendMessage() -funkkaria.

Toinen tapa on puskea TextOutilla teksti suoraan ikkunaan.

Laitan tähän ohjelman, jonka tein ohjelmointikurssilla. Ohjelma ei itsessään tee mitään, mutta demonstroi erilaisten kontrollin käyttöä.

//==========================================================================
// Päätin tehdä ihan Win32-ohjelman kurssia varten.
// Ohjelma on yksinkertainen ja aika pieni esimerkki Win32-ohjelmoinnista,
// mutta luulisi riittävän kurssin läpipääsemiseksi. :-)
//
// Koodi on aika laiskasti kommentoitu.
//
// Jos koitat kääntää tätä ohjelmaa itse muista linkata comctl32.lib
// projektiin mukaan.
//
// Kääntyy ainakin Microsoft Visual C++ 6.0:lla.
//==========================================================================

// Otsikkotiedostot
#include <iostream>
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <math.h>

// Ikkunaproseduurifunktion esittely
LRESULT CALLBACK IkkunaProseduuri (HWND, UINT, WPARAM, LPARAM);

// Funktio, joka suoritetaan kun ohjelma käynnistyy
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iShowCmd) {
	// Sanomastruktuurimuuttuja
	MSG iMsg;

	// Ikkunan luokkastruktuurimuuttuja
	WNDCLASSEX wndClass;

	wndClass.cbSize = sizeof(wndClass);
	wndClass.style = CS_HREDRAW | CS_VREDRAW;
	wndClass.lpfnWndProc = IkkunaProseduuri; // Ikkunaproseduurin nimi (Tärkeä)
	wndClass.cbClsExtra = 0;
	wndClass.cbWndExtra = 0;
	wndClass.hInstance = hInstance; // Ohjelman ilmentymän kahva (Tärkeä)
	wndClass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
	wndClass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
	wndClass.hCursor = LoadCursor (NULL, IDC_ARROW);
	wndClass.hbrBackground = (HBRUSH) COLOR_WINDOW;
	wndClass.lpszMenuName = NULL;
	wndClass.lpszClassName = "Ohjelma"; // Ikkunan luokan nimi (Tärkeä)

	// Rekisteröidään ikkunan luokka
	RegisterClassEx (&wndClass);

	// Luodaan ikkuna
	HWND hWnd = CreateWindow ("Ohjelma", "TI3-kurssin työ", WS_OVERLAPPEDWINDOW, 100, 100, 371, 397, NULL, NULL, hInstance, NULL);

	// Piirretään ikkuna
	ShowWindow (hWnd, iShowCmd);

	// Päivitetään ikkuna
	UpdateWindow (hWnd);

	// Yleisten kontrollien rekisteröinti
	InitCommonControls ();

	// Sanomien käsittelysilmukka
	while (GetMessage(&iMsg, NULL, 0, 0) > 0) {
		TranslateMessage (&iMsg);
		DispatchMessage (&iMsg);
	}

	// Käyttöjärjestelmälle palautuva arvo
	return iMsg.wParam;
}

// Ikkunaproseduurifunktio
LRESULT CALLBACK IkkunaProseduuri (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	// Esitellään muuttujat (Staattiset muuttujat säilyvät kun funktiota ei olla suorittamassa)
	static HWND hwndStatus, hwndEdit1, hwndEdit2, hwndButton1, hwndButton2, hwndButton3, hwndButton4, hwndButton5, hwndButton6, hwndButton7, hwndButton8, hwndList1, hwndList2, hwndBox;
	static HFONT hfDefault;
	static char chBuffer[80];
	static RECT rSize;
	static int parts[1], iIndex;

	// Haetaan systemfontti
	hfDefault = (HFONT) GetStockObject(DEFAULT_GUI_FONT);

	// Käsitellään lomakkeelta tulleet sanomat
	switch (uMsg) {
		// Ikkuna on luotu (Initiaalisanoma)
		case WM_CREATE:
			// Luodaan kontrollit
			GetClientRect (hWnd, &rSize);

			hwndBox = CreateWindowEx (NULL, "BUTTON", "Listat:", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 5, 5, rSize.right - 10, rSize.bottom - 32, hWnd, (HMENU) 0, GetModuleHandle(NULL), NULL);
			SendMessage (hwndBox, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndStatus = CreateWindowEx (NULL, STATUSCLASSNAME, "Lisää/Poista/Muokkaa/Vaihda listoissa olevia rivejä...", WS_CHILD | WS_VISIBLE | CCS_BOTTOM | SBARS_SIZEGRIP, 0, 0, 0, 0, hWnd, (HMENU) 1, GetModuleHandle(NULL), NULL);
			SendMessage (hwndStatus, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));
			SendMessage (hwndStatus, SB_SETPARTS, 1, (LPARAM) parts);

			hwndEdit1 = CreateWindowEx (WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 15, 25, rSize.right - (ceil(rSize.right / 2)) - 50 - 15, 20, hWnd, (HMENU) 2, GetModuleHandle(NULL), NULL);
			SendMessage (hwndEdit1, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndEdit2 = CreateWindowEx (WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, ceil(rSize.right / 2) + 50, 25, ceil(rSize.right / 2) - 50 - 15, 20, hWnd, (HMENU) 3, GetModuleHandle(NULL), NULL);
			SendMessage (hwndEdit2, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndButton1 = CreateWindowEx (NULL, "BUTTON", "->", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, ceil(rSize.right / 2) - 15, ceil(rSize.bottom / 2) - 110, 30, 30, hWnd, (HMENU) 4, GetModuleHandle(NULL), NULL);
			SendMessage (hwndButton1, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndButton2 = CreateWindowEx (NULL, "BUTTON", "<-", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, ceil(rSize.right / 2) - 15, ceil(rSize.bottom / 2) - 80, 30, 30, hWnd, (HMENU) 5, GetModuleHandle(NULL), NULL);
			SendMessage (hwndButton2, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndButton3 = CreateWindowEx (NULL, "BUTTON", "Lisää", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 15, rSize.bottom - 125, rSize.right - (ceil(rSize.right / 2)) - 50 - 15, 25, hWnd, (HMENU) 6, GetModuleHandle(NULL), NULL);
			SendMessage (hwndButton3, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndButton4 = CreateWindowEx (NULL, "BUTTON", "Poista", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 15, rSize.bottom - 95, rSize.right - (ceil(rSize.right / 2)) - 50 - 15, 25, hWnd, (HMENU) 7, GetModuleHandle(NULL), NULL);
			SendMessage (hwndButton4, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndButton5 = CreateWindowEx (NULL, "BUTTON", "Tyhjennä", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 15, rSize.bottom - 65, rSize.right - (ceil(rSize.right / 2)) - 50 - 15, 25, hWnd, (HMENU) 8, GetModuleHandle(NULL), NULL);
			SendMessage (hwndButton5, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndButton6 = CreateWindowEx (NULL, "BUTTON", "Lisää", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, ceil(rSize.right / 2) + 50, rSize.bottom - 125, ceil(rSize.right / 2) - 50 - 15, 25, hWnd, (HMENU) 9, GetModuleHandle(NULL), NULL);
			SendMessage (hwndButton6, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndButton7 = CreateWindowEx (NULL, "BUTTON", "Poista", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, ceil(rSize.right / 2) + 50, rSize.bottom - 95, ceil(rSize.right / 2) - 50 - 15, 25, hWnd, (HMENU) 10, GetModuleHandle(NULL), NULL);
			SendMessage (hwndButton7, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndButton8 = CreateWindowEx (NULL, "BUTTON", "Tyhjennä", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, ceil(rSize.right / 2) + 50, rSize.bottom - 65, ceil(rSize.right / 2) - 50 - 15, 25, hWnd, (HMENU) 11, GetModuleHandle(NULL), NULL);
			SendMessage (hwndButton8, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndList1 = CreateWindowEx (WS_EX_CLIENTEDGE, "LISTBOX", NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, 15, 50, rSize.right - (ceil(rSize.right / 2)) - 50 - 15, rSize.bottom - 190, hWnd, (HMENU) 12, GetModuleHandle(NULL), NULL);
			SendMessage (hwndList1, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));

			hwndList2 = CreateWindowEx (WS_EX_CLIENTEDGE, "LISTBOX", NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, ceil(rSize.right / 2) + 50, 50, ceil(rSize.right / 2) - 50 - 15, rSize.bottom - 190, hWnd, (HMENU) 13, GetModuleHandle(NULL), NULL);
			SendMessage (hwndList2, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(TRUE, 0));
		break;
		case WM_SIZE:
			// Ikkunan koko on muuttunut. Tämä on vain koordinaattien lasketaa.
			parts[0] = LOWORD(lParam);
			GetClientRect (hWnd, &rSize);
			MoveWindow (hwndBox, 5, 5, rSize.right - 10, rSize.bottom - 32, TRUE);
			MoveWindow (hwndStatus, NULL, NULL, NULL, NULL, NULL);
			SendMessage (hwndStatus, SB_SETPARTS, 1, (LPARAM) parts);
			MoveWindow (hwndEdit1, 15, 25, rSize.right - (ceil(rSize.right / 2)) - 50 - 15, 20, TRUE);
			MoveWindow (hwndEdit2, ceil(rSize.right / 2) + 50, 25, ceil(rSize.right / 2) - 50 - 15, 20, TRUE);
			MoveWindow (hwndButton1, ceil(rSize.right / 2) - 15, ceil(rSize.bottom / 2) - 110, 30, 30, TRUE);
			MoveWindow (hwndButton2, ceil(rSize.right / 2) - 15, ceil(rSize.bottom / 2) - 80, 30, 30, TRUE);
			MoveWindow (hwndButton3, 15, rSize.bottom - 125, rSize.right - (ceil(rSize.right / 2)) - 50 - 15, 25, TRUE);
			MoveWindow (hwndButton4, 15, rSize.bottom - 95, rSize.right - (ceil(rSize.right / 2)) - 50 - 15, 25, TRUE);
			MoveWindow (hwndButton5, 15, rSize.bottom - 65, rSize.right - (ceil(rSize.right / 2)) - 50 - 15, 25, TRUE);
			MoveWindow (hwndButton6, ceil(rSize.right / 2) + 50, rSize.bottom - 125, ceil(rSize.right / 2) - 50 - 15, 25, TRUE);
			MoveWindow (hwndButton7, ceil(rSize.right / 2) + 50, rSize.bottom - 95, ceil(rSize.right / 2) - 50 - 15, 25, TRUE);
			MoveWindow (hwndButton8, ceil(rSize.right / 2) + 50, rSize.bottom - 65, ceil(rSize.right / 2) - 50 - 15, 25, TRUE);
			MoveWindow (hwndList1, 15, 50, rSize.right - (ceil(rSize.right / 2)) - 50 - 15, rSize.bottom - 190, TRUE);
			MoveWindow (hwndList2, ceil(rSize.right / 2) + 50, 50, ceil(rSize.right / 2) - 50 - 15, rSize.bottom - 190, TRUE);
		break;
		case WM_COMMAND:
			switch (HIWORD(wParam)) {
				case BN_CLICKED:
					if (LOWORD(wParam) == 4) {
						iIndex = SendMessage (hwndList1, LB_GETCURSEL, 0, 0);
						if (iIndex != LB_ERR) {
							ListBox_GetText (hwndList1, iIndex, chBuffer);
							SendMessage (hwndList2, LB_ADDSTRING, 0, (LPARAM) chBuffer);
							SendMessage (hwndList1, LB_DELETESTRING, iIndex, 0);
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivi siirrettiin vasemmalta oikealle...");
						} else {
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivin siirrossa tapahtui virhe ja toiminto keskeytettiin!");
						}
					}
					else if (LOWORD(wParam) == 5) {
						iIndex = SendMessage (hwndList2, LB_GETCURSEL, 0, 0);
						if (iIndex != LB_ERR) {
							ListBox_GetText (hwndList2, iIndex, chBuffer);
							SendMessage (hwndList1, LB_ADDSTRING, 0, (LPARAM) chBuffer);
							SendMessage (hwndList2, LB_DELETESTRING, iIndex, 0);
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivi siirrettiin oikealta vasemmalle...");
						} else {
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivin siirrossa tapahtui virhe ja toiminto keskeytettiin!");
						}
					}
					else if (LOWORD(wParam) == 6) {
						GetWindowText (hwndEdit1, chBuffer, 80);
						if (strcmp(chBuffer, "") == TRUE) {
							SendMessage (hwndList1, LB_ADDSTRING, 0, (LPARAM) chBuffer);
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivi lisätty vasempaan listaan...");
						} else {
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivin lisäyksessä tapahtui virhe ja toiminto keskeytettiin!");
						}
					}
					else if (LOWORD(wParam) == 7) {
						iIndex = SendMessage (hwndList1, LB_GETCURSEL, 0, 0);
						if (iIndex != LB_ERR) {
							SendMessage (hwndList1, LB_DELETESTRING, iIndex, 0);
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivi poistettu vasemmasta listasta...");
						} else {
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivin poistossa tapahtui virhe ja toiminto lopetettiin!");
						}
					}
					else if (LOWORD(wParam) == 8) {
						SendMessage (hwndList1, LB_RESETCONTENT, 0, 0);
						SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Vasemmanpuoleinen lista tyhjennetty...");
					}
					else if (LOWORD(wParam) == 9) {
						GetWindowText (hwndEdit2, chBuffer, 80);
						if (strcmp(chBuffer, "") == TRUE) {
							SendMessage (hwndList2, LB_ADDSTRING, 0, (LPARAM) chBuffer);
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivi lisätty oikeaan listaan...");
						} else {
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivin lisäyksessä tapahtui virhe ja toiminto keskeytettiin!");
						}
					}
					else if (LOWORD(wParam) == 10) {
						iIndex = SendMessage (hwndList2, LB_GETCURSEL, 0, 0);
						if (iIndex != LB_ERR) {
							SendMessage (hwndList2, LB_DELETESTRING, iIndex, 0);
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivi poistettu oikeasta listasta...");
						} else {
							SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Rivin poistossa tapahtui virhe ja toiminto lopetettiin!");
						}
					}
					else if (LOWORD(wParam) == 11) {
						SendMessage (hwndList2, LB_RESETCONTENT, 0, 0);
						SendMessage (hwndStatus, SB_SETTEXT, 0, (LPARAM) "Oikeanpuoleinen lista tyhjennetty...");
					}
				break;
			}
		break;
		case WM_DESTROY:
			PostQuitMessage (0);
			return 0;
		break;
		default:
			return DefWindowProc (hWnd, uMsg, wParam, lParam);
		break;
	}
}

Aijjai nyt kyllä häpäisee putkan leiskan tämä koodinpätkä :P

Tulipas vielä mieleen että tämän voisi laittaa koodivinkkeihin. Taidanpa laittaa.

Meitsi [14.10.2003 17:07:45]

#

Huhhuh! Meinasin ihan hukkua koodiin! Olen saanut jo tekstiä ja alertinkin toimimaan, mutta jokin mättää kun en saa valikkoa näkyviin. Se on kyllä määritelty resurssitiedostoon ja cpp-hen mutta ei näy. Missäköhän vika on. Voisiko joku kertoa. Samoin kuvake ei vaihdu. Se laittaa oman kuvakkeen tilalle semmosen windows lipun. default-kuvake kyllä toimii.
Lähdekoodi:

#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
HINSTANCE hInstance;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    MSG msg;
    WNDCLASSEX wndclass;

    wndclass.cbSize = sizeof (wndclass);
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
    wndclass.lpszMenuName = "MyMenu";
    wndclass.lpszClassName = "OmaLuokka";
    wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

    RegisterClassEx (&wndclass);

    HWND hwnd = CreateWindow ("OmaLuokka", "ApuOhjelma", WS_OVERLAPPEDWINDOW,
               CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
               CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

    ShowWindow (hwnd, iCmdShow);
    UpdateWindow (hwnd);

    MessageBox (hwnd, "Tervetuloa käyttämään ApuOhjelmaa!", "ApuOhjelma", MB_OK);
    while (GetMessage (&msg, NULL, 0, 0))
    {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
    }

    return msg.wParam;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    static HDC hdc;
    static PAINTSTRUCT ps;
    static RECT rect;
    static HWND hwndGroupbox;
    static HFONT hFont;

    switch (iMsg)
    {

    case WM_CREATE :
        hFont = (HFONT) GetStockObject(DEFAULT_GUI_FONT) ;
        return 0;

    case WM_COMMAND:
        return 0;

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

    GetClientRect (hwnd, &rect);

    DrawText (hdc, "Helollo!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

    EndPaint (hwnd, &ps);
    return 0;
    case WM_SIZE:
        MoveWindow (hwndGroupbox, 10, 10, LOWORD(lParam)-20, HIWORD(lParam)-20, TRUE);
        return 0;

    case WM_DESTROY:
        PostQuitMessage (0);
        return 0;

    }

    return DefWindowProc (hwnd, iMsg, wParam, lParam);
}

Ja resurssitiedosto:

500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "C:\c_jutut\testiapsi.ico"
KUVA ICON "C:\c_jutut\testiapsi.ico"
MyMenu MENU
{
POPUP "&Tiedosto" {
MENUITEM "&Sulje apsi", IDM_EXIT

}
}

Meitsi [14.10.2003 17:11:35]

#

Tuolla resurssitiedostossa ja lähdekoodissa ei nyt ole sitä kuvakehömpötystä, mutta jos joku voisi neuvoa miten sen saa toimimaan.

odys [14.10.2003 18:27:31]

#

En oikeastikkaan mitään turhia porissut kun sanoin että http://cpp.mureakuha.com/ osoitteesta löydät paljon Win32 ohjelmointiin liittyvää ryönää.

http://cpp.mureakuha.com/win32/win32vaikeat.htm

Jos vaikka vilkaiset tehtävää 3 niin on siinä sinulle valmis esimerkki menujen, ikonien ja kursoreiden käytöstä. Muuttele ja sovella ja opettele.

Meitsi [14.10.2003 19:18:05]

#

Ohops! Jäi huomaamatta. Kiitti!

Meitsi [15.10.2003 18:40:52]

#

Miten saa ikkuna kokoa muutettua ikkunaa luotaessa??

odys [15.10.2003 18:57:33]

#

Omassa koodissasi kohdassa: HWND hwnd = CreateWindow ("OmaLuokka", "ApuOhjelma", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

2 ekaa CW_USEDEFAULT:ia ovat ikkunan aloituspaikka esim: HWND hwnd = CreateWindow ("OmaLuokka", "ApuOhjelma", WS_OVERLAPPEDWINDOW,
50, 100, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, NULL, hInstance, NULL); // Ikkuna on aukeamisessa kohdassa x: 50px y: 100px

Seuraavat 2 CW_USEDEFAULTIA ovat ikkunan koko: HWND hwnd = CreateWindow ("OmaLuokka", "ApuOhjelma", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 500,
500, NULL, NULL, hInstance, NULL); // Avaa ikkunan kooltaan 500x500px

Meitsi [17.10.2003 12:35:15]

#

Juu, wörkkii hyvin. Miten saa tiedostosta luettua dataa kun kokeilin eilen jollakin fstreamilla ja kääntäjä oli melkein räjähtää virhe-varoitus-tulvasta. Ja rekisteriavaimista winkkiä gitos. Olisi tarkotuksena tehdä päivän vitsi-ohjelma joka aina sisään koneen käynnistäessä näyttää messageboxissa päivän vitsin joka luettaisiin tiedostosta ja rekisteriin merkittäisiin että se vitsi on jo "luettu" ja sitä ei pidä näyttää uudelleen. Kun kaikki vitsit on "luettu" ohjelma alkaisi lukea niitä alustaalkaen uudelleen. Eli miten saa rekisteriavaimesta luettua tietoa ja sinne laitettua tietoa. Ja miten saa tiedostosta poimittua muuttujaan tietyn rivin. Ja sitten vielä probleema. Kun ohjelma on asennettu koneelle (ajattelin laittaa jakoon samalla asennusohjelmalla kuin oppiaikäkaikessa) niin eihän se mun ohjelma tiedä mihin kansioon on asennettu. Ja eikös sitä tiedostoa avattaessa tarvitse olla koko polku? Niin onkohan sillä asennusohjelmalla laittaa rekisteriin avain josta se mun ohjelma päättelisi minne on asennettu ja hakisi sitä tiedostoa samasta kansiosta? Mutta miten tämä kaikki toteutetaan? ÄÄH OLEN PIHALLA! HELPPIÄ PLIIS

Meitsi [17.10.2003 12:37:03]

#

ARGH MITEN PALJON KIRJOTUSVIRHEITÄ...

Meitsi [17.10.2003 12:48:38]

#

Sittevielä miten saa trayhin kuvakkeen ja kun sitä klikkaa niin ohjelman ikkuna avautuu

Meitsi [17.10.2003 17:12:20]

#

ARGH! En saa ohjelmakuvaketta toimimaan. Se on vaan kokoajan se windows-lippu. Mikähän mättää.
Tässä sorsa:

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
HINSTANCE hInstance;
char ohjelmanimi[] = "kuva";

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    MSG msg;
    WNDCLASSEX wndclass;

    wndclass.cbSize = sizeof (wndclass);
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon (hInstance, ohjelmanimi);
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH) COLOR_WINDOW;
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = ohjelmanimi;
    wndclass.hIconSm = LoadIcon (hInstance, ohjelmanimi);

    RegisterClassEx (&wndclass);

    HWND hwnd = CreateWindow (ohjelmanimi, "VitsiKone v.1.0", WS_OVERLAPPEDWINDOW,
               CW_USEDEFAULT, CW_USEDEFAULT, 285,
               110, NULL, NULL, hInstance, NULL);

    ShowWindow (hwnd, iCmdShow);
    UpdateWindow (hwnd);

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

    return msg.wParam;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    static HWND hwndVitsi, hwndLopeta, hwndCopy, hwndTietoja;
    static HFONT hFont;

    switch (iMsg)
    {

    case WM_CREATE :
        hFont = (HFONT) GetStockObject(DEFAULT_GUI_FONT) ;
        hwndVitsi = CreateWindow ("button", "Kerro vitsi", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 10, 100, 30, hwnd, (HMENU) 1, hInstance, NULL ) ;
        hwndLopeta = CreateWindow ("button", "Lopeta", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 120, 10, 150, 30, hwnd, (HMENU) 2, hInstance, NULL ) ;
        hwndTietoja = CreateWindow ("button", "Tietoja ohjelmasta", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 50, 150, 30, hwnd, (HMENU) 3, hInstance, NULL ) ;
        SetClassLong (hwnd, GCL_HICON, LoadIcon (hInstance, "kuva"));
        SetClassLong (hwnd, GCL_HICONSM, LoadIcon (hInstance, "kuva"));
        return 0;

    case WM_COMMAND:
    if (LOWORD(wParam) == 1 && HIWORD(wParam) == BN_CLICKED && (HWND) lParam == hwndVitsi)
    {
    MessageBox (hwnd, "Butterfree", "VitsiKone v.1.0", MB_OK);
    } else if (LOWORD(wParam) == 2 && HIWORD(wParam) == BN_CLICKED && (HWND) lParam == hwndLopeta) {
    DestroyWindow (hwnd);
    break ;
    } else if (LOWORD(wParam) == 3 && HIWORD(wParam) == BN_CLICKED && (HWND) lParam == hwndTietoja) {
    MessageBox (hwnd, "VitsiKone\nDizzyProductions 2003\nwww.dizzyproductions.cjb.net", "VitsiKone v.1.0", MB_ICONASTERISK | MB_OK);
    }
    return 0;

    case WM_DESTROY:
        PostQuitMessage (0);
        return 0;

    }

    return DefWindowProc (hwnd, iMsg, wParam, lParam);
}

ja tässä resurssitiedosto:

500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "C:\c_jutut\vitsik\vitsikone.ico"
kuva ICON MOVEABLE PURE LOADONCALL DISCARDABLE "C:\c_jutut\vitsik\vitsikone.ico"

teen devc++ssalla
Jamuuten en sittenkään aio käyttää tota rekisterisähellystä vaan laitan sen vitsitiedoston suoraan c:n juureen
näin se hoituu. Tota tray kuvaakaan en aio laittaa. Miten vois toteuttaa kun tarkotuksena olis nyt tehdä semmonen että kun se ohjelma latais ekaan muuttujaan tiedoston vitsi.vkcf sisällön (se on numero) ja sitten lukis toiseen muuttujaan vitsit.joke tiedoston rivin, jonka numero juuri haettiin vitsit.vkcf tiedostosta. Lopuksi se lisäis siihen ensimmäiseen muuttujaan numeron yksi ja tallentais sen ekan tiedoston. (ettei ohjelma lue aina vaan samaa riviä) Tokaan tiedostoon ei tehdä mitään muutoksia, sielä vain luetaan.

Meitsi [22.10.2003 17:37:54]

#

helppliis


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta