Oczywiście, spróbuję.
Mój program docelowo ma odczytywać, modyfikować i/lub tworzyć pliki las.ini
Przykład takiego pliku jest powyżej.
W praktyce interesuje mnie tylko 5 możliwości takich plików (nazwałem je wyżej postaciami).
Cztery różniące się w 2 i/lub 3 linijce i piąta postać która nie jest żadną z tych trzech.
Występujące postacie takiego pliku:
postać pos_1 zawartość pliku:
[brzoza]
Drzewo = 1
Krzak = abc
Trawa = 1998
Glon = 0
postać pos_2 zawartość pliku:
[brzoza]
Drzewo = 1
Krzak = bcd
Trawa = 1999
Glon = 0
postać pos_3 zawartość pliku:
[brzoza]
Drzewo = 1
Krzak = cde
Trawa = 2000
Glon = 0
postać pos_4 zawartość pliku:
[brzoza]
Drzewo = 1
Krzak = def
Trawa = 2001
Glon = 0
postać pos_inna zawartość pliku:
[brzoza]
Drzewo = 1
Krzak = xxxxx /* cokolwiek innego niż abc lub bcd lub cde lub def
Trawa = yyyyy /* cokolwiek innego niż 1998, 1999, 2000, 2001
Glon = 0
I teraz tak. Mam napisany już program który tworzy okno z przyciskami i stałym tekstem.
Kończąc rysować to okno program miałby otwierać aktualnie znajdujący się w bieżącym katalogu plik las.ini
Jeżeli rozpozna postać 1-szą stałym tekstem na oknie napisze "pos_1"
jeżeli rozpozna postać 2-gą stałym tekstem na oknie napisze "pos_2"
.....
jeżeli rozpozna postać inną stałym tekstem na oknie napisze "pos_inna"
Czyli okno byłoby do końca narysowane.
Są na nim 4 przyciski które zapiszą w pliku las.ini odpowiednie linie.
Przycisk 1 nadpisze las.ini do postaci 1
Przycisk 2 nadpisze las.ini do postaci 2
....
Przycisk 4 nadpisze las.ini do postaci 4
Po takim kliknięciu oprócz nadpisania pliku ma zmienić ten jeden wyraz wypisany stałym tekstem w oknie.
Program czeka na zamknięcie, ewentualnie na kolejną zmianę.
Uff..
Może najlepiej jak wkleję obecny kod:
#include <windows.h>
#include <iostream>
#include <conio.h>
#include <sstream>
#include <fstream>
/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
/* Make the class name into a global variable */
char szClassName[ ] = "WindowsApp";
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
HWND hwnd; /* This is the handle for our window */
MSG messages; /* Here messages to the application are saved */
WNDCLASSEX wincl; /* Data structure for the windowclass */
/* The Window structure */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
wincl.style = CS_DBLCLKS; /* Catch double-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);
/* Use default icon and mouse-pointer */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* No menu */
wincl.cbClsExtra = 0; /* No extra bytes after the window class */
wincl.cbWndExtra = 0; /* structure or the window instance */
/* Use Windows's default color as the background of the window */
wincl.hbrBackground = GetSysColorBrush(15);
/* Register the window class, and if it fails quit the program */
if (!RegisterClassEx (&wincl))
return 0;
/* The class is registered, let's create the program*/
hwnd = CreateWindowEx (
0, /* Extended possibilites for variation */
szClassName, /* Classname */
"bla bla bla", /* Title Text */
WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
300, /* The programs width */
400, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);
/* Make the window visible on the screen */
ShowWindow (hwnd, nFunsterStil);
/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}
/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;
}
/* This function is called by the Windows function DispatchMessage() */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) /* handle the messages */
{
case WM_CREATE:
/* tu co się ma dziać przy otwieraniu okna, np textboxes itd */
/* Teksty stałe w oknie */
CreateWindow(TEXT("STATIC"), TEXT("Manager pozwala skonfigurować ustawienia dfg dfg dfg dfg dfg dfg dgf dsgf dsgf dfg dfg "),
WS_VISIBLE | WS_CHILD | SS_CENTER,
5, 20, 275, 100,
hwnd, (HMENU) NULL, NULL, NULL );
CreateWindow(TEXT("STATIC"), TEXT("Aktualne ustawienie : "),
WS_VISIBLE | WS_CHILD | SS_LEFT,
45, 100, 200, 20,
hwnd, (HMENU) NULL, NULL, NULL );
CreateWindow(TEXT("STATIC"), TEXT("Nastaw pos1"),
WS_VISIBLE | WS_CHILD | SS_LEFT,
45, 130, 130, 20,
hwnd, (HMENU) NULL, NULL, NULL );
CreateWindow(TEXT("STATIC"), TEXT("Nastaw pos2"),
WS_VISIBLE | WS_CHILD | SS_LEFT,
45, 160, 130, 20,
hwnd, (HMENU) NULL, NULL, NULL );
CreateWindow(TEXT("STATIC"), TEXT("Nastaw pos3"),
WS_VISIBLE | WS_CHILD | SS_LEFT,
45, 190, 130, 20,
hwnd, (HMENU) NULL, NULL, NULL );
CreateWindow(TEXT("STATIC"), TEXT("Nastaw pos4"),
WS_VISIBLE | WS_CHILD | SS_LEFT,
45, 220, 130, 20,
hwnd, (HMENU) NULL, NULL, NULL );
/* Przyciski */
CreateWindowEx(0, "BUTTON", "ustaw", WS_CHILD | WS_VISIBLE,
190, 130, 60, 20, hwnd, (HMENU) 1, NULL, NULL );
CreateWindowEx(0, "BUTTON", "ustaw", WS_CHILD | WS_VISIBLE,
190, 160, 60, 20, hwnd, (HMENU) 2, NULL, NULL );
CreateWindowEx(0, "BUTTON", "ustaw", WS_CHILD | WS_VISIBLE,
190, 190, 60, 20, hwnd, (HMENU) 3, NULL, NULL );
CreateWindowEx(0, "BUTTON", "ustaw", WS_CHILD | WS_VISIBLE,
190, 220, 60, 20, hwnd, (HMENU) 4, NULL, NULL );
CreateWindowEx(0, "BUTTON", "Przywróć inną konfigurację", WS_CHILD | WS_VISIBLE,
45, 280, 210, 20, hwnd, (HMENU) 5, NULL, NULL );
CreateWindowEx(0, "BUTTON", "Info", WS_CHILD | WS_VISIBLE,
45, 320, 100, 20, hwnd, (HMENU) 6, NULL, NULL );
CreateWindowEx(0, "BUTTON", "Zamknij", WS_CHILD | WS_VISIBLE,
155, 320, 100, 20, hwnd, (HMENU) 7, NULL, NULL );
/* NAJPIERW ZROBIĘ SOBIE KOPIE AKTUALNEGO PLIKU do las.sol*/
CopyFile("las.ini", "las.sol", FALSE);
/* *** TU CHCIAŁEM DZIAŁAĆ DALEJ ALE SIĘ ZAWIĄZAŁEM ***** */
break;
case WM_COMMAND:
/* cała akcja programu*/
/* akcje po wybraniu odpowiedniego przycisku*/
if (LOWORD(wParam) == 1){
/* NADPISUJE LAS.INI WARTOŚCIAMI POSTACI POS_1 */
}
if (LOWORD(wParam) == 2){
/* NADPISUJE LAS.INI WARTOŚCIAMI POSTACI POS_2 */
}
if (LOWORD(wParam) == 3){
/* NADPISUJE LAS.INI WARTOŚCIAMI POSTACI POS_3 */
}
if (LOWORD(wParam) == 4){
/* NADPISUJE LAS.INI WARTOŚCIAMI POSTACI POS_4 */
}
if (LOWORD(wParam) == 5){
/* pRZYWRACA POSTAĆ POS_INNA */
CopyFile("las.sol", "las.ini", FALSE);
}
if (LOWORD(wParam) == 6){
MessageBox(hwnd, "bla bla bla", "bla bla bla v1.0", MB_ICONINFORMATION );
}
if (LOWORD(wParam) == 7){
PostQuitMessage (0);
}
break;
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
Ten dopisany tekst stały ("pos1" lub "pos2" .... "pos_inna") miałby być po zdaniu "Aktualna konfiguracja:", najlepiej innym kolorem.
Myślę że teraz jaśniej choć dłużej.
pozdrawiam
Ten post był edytowany przez Keeny dnia: 08 Luty 2012 - 19:54