codice:
#include <windows.h>
#include <string>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define Show(Window) RedrawWindow(Window,0,0,0);ShowWindow(Window,SW_SHOW);
using namespace std;
char ClassName1[2048]; // default size
char ClassName2[2048]; // default size
MSG msg;
WNDCLASS wc;
HINSTANCE hInst;
enum {ID_BUTTON1,ID_BUTTON2,ID_EDIT1,ID_LISTBOX1,ID_LABEL6,ID_LABEL3};
HWND form1,label1,label2,label3,label4,label5,label6,edit1,listbox1, button1,button2;
enum {ID_FORM2,ID_LABEL21};
HWND form2,label21;
int i=0;
char buffer[256];
LRESULT CALLBACK WinProc1 (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WinProc2 (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow)
{
hInst = hInstance;
strcpy(ClassName1,"principale");
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = WinProc1;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIcon(NULL,IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = ClassName1;
RegisterClass(&wc);
form1 = CreateWindow(ClassName1,"Server",WS_MINIMIZEBOX | WS_SIZEBOX | WS_CAPTION | WS_MAXIMIZEBOX | WS_POPUP | WS_SYSMENU,300,300,400,340,NULL,(HMENU)NULL,hInst,NULL);
label1 = CreateWindow("STATIC","Scrivi la porta:",WS_CHILD | WS_VISIBLE,10,10,175,20,form1,0,hInst,NULL);
label2 = CreateWindow("STATIC","La porta selezionata è:",WS_CHILD | WS_VISIBLE,200,10,200,20,form1,0,hInst,NULL);
label3 = CreateWindow("STATIC","",WS_CHILD | WS_BORDER | WS_VISIBLE,200,30,175,20,form1,(HMENU)ID_LABEL3,hInst,NULL);
label4 = CreateWindow("STATIC","Seleziona il servizio",WS_CHILD | WS_VISIBLE,10,70,175,20,form1,0,hInst,NULL);
label5 = CreateWindow("STATIC","Descrizione del servizio:",WS_CHILD | WS_VISIBLE,200,70,175,20,form1,0,hInst,NULL);
label6 = CreateWindow("STATIC","",WS_CHILD | SS_LEFT | WS_BORDER | WS_VSCROLL | WS_VISIBLE,200,90,175,170,form1,(HMENU)ID_LABEL6,hInst,NULL);
edit1 = CreateWindow("EDIT", NULL,ES_NUMBER | WS_BORDER | WS_CHILD | ES_AUTOHSCROLL | WS_VISIBLE,10,30,140,20,form1,(HMENU)ID_EDIT1,hInst,NULL);
button1 = CreateWindow("BUTTON","OK",BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE ,155,30,30,20,form1,(HMENU)ID_BUTTON1,hInst,NULL);
button2 = CreateWindow("BUTTON","Avvia il Servizio",BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE ,200,264,175,20,form1,(HMENU)ID_BUTTON2,hInst,NULL);
listbox1 = CreateWindow("LISTBOX",NULL,LBS_STANDARD | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP,10,90,175,200,form1,(HMENU) ID_LISTBOX1,hInst,NULL);
SendMessage(listbox1,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"1 - Service");
SendMessage(listbox1,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"2 - Service");
SendMessage(listbox1,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"3 - Service");
SendMessage(listbox1,(UINT)LB_SETCURSEL, 0, 0);
SetWindowText(label6,"Reference funzioni");
Show(form1);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WinProc1(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
RECT rect;
HDC hdc;
if (msg==WM_COMMAND)
{
if (LOWORD(wParam)==ID_LISTBOX1)
{
if (HIWORD(wParam)==LBN_SELCHANGE)
{
i=SendMessage(listbox1,(UINT)LB_GETCURSEL,(WPARAM)0,(LPARAM)0);
switch(i)
{
case 0: strcpy (buffer,"Funzionamento 1° servizio"); break;
case 1: strcpy (buffer,"Funzionamento 2° servizio"); break;
case 2: strcpy (buffer,"Funzionamento 3° servizio"); break;
}
SetWindowText(label6,buffer);
}
}
if (LOWORD(wParam)==ID_BUTTON1)
{
GetDlgItemText(hWnd, ID_EDIT1, buffer, sizeof(buffer));
if (buffer[0]!=0)
{
SetWindowText(label3,buffer);
SetWindowText(edit1,"");
i = atoi (buffer);
port=(short) i;
}
}
if (LOWORD(wParam)==ID_BUTTON2)
{
i=SendMessage(listbox1, (UINT) LB_GETCURSEL,(WPARAM) wParam,(LPARAM) lParam);
switch(i)
{
case 0:
MessageBox (NULL, "1° servizio", "Messaggio", MB_OK | MB_ICONEXCLAMATION);
break;
case 1:
strcpy(ClassName2,"figlio");
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = WinProc2;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIcon(NULL,IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = ClassName2;
RegisterClass(&wc);
form2 = CreateWindow(ClassName2,"Servizio",WS_MINIMIZEBOX | WS_SIZEBOX | WS_CAPTION | WS_MAXIMIZEBOX | WS_POPUP | WS_SYSMENU,320,320,600,440,NULL,(HMENU)ID_FORM2,hInst,NULL);
label21 = CreateWindow("Listbox","",WS_CHILD | SS_LEFT | WS_BORDER | WS_VSCROLL | WS_VISIBLE,1,1,583,403,form2,(HMENU)ID_LABEL21,hInst,NULL);
/***************************************************************************************/
/****************************PROBLEMA***************************************************/
/***************************************************************************************/
while(1)
{
strncat (buffer, "prova prova prova\n", 18);
SetWindowText(label21,buffer);
Sleep(100);
Show(form2);
}
/***************************************************************************************/
/***************************************************************************************/
break;
}
}
}
if (msg==WM_DESTROY)
{
UnregisterClass(ClassName1,hInst);
PostQuitMessage(0);
}
if (msg==WM_GETMINMAXINFO)
{
LPMINMAXINFO pMMI = (LPMINMAXINFO)lParam;
pMMI->ptMaxTrackSize.x = 400;
pMMI->ptMaxTrackSize.y = 340;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
LRESULT CALLBACK WinProc2(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg==WM_DESTROY)
{
UnregisterClass(ClassName2,hInst);
}
if (msg==WM_GETMINMAXINFO)
{
LPMINMAXINFO pMMI = (LPMINMAXINFO)lParam;
pMMI->ptMaxTrackSize.x = 600;
pMMI->ptMaxTrackSize.y = 440;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
Mettendo il loop perdo completamente il controllo sulle finestre portando al crush l'applicazione