PDA

Visualizza la versione completa : [C++] Visualizzazione contatore in dialog


drasgo
06-04-2012, 17:58
premetto che sono nuovo nel campo delle API di microsoft, quindi ho provato a fare questo semplice programma che, in teoria, doveva essere un contatore e, se arrivava a 127, prima mostrava 000 e se si schiacciava di nuovo il programma si chiudeva.. perņ, dopo che schiaccio il pulsante la prima volta ( quando c'č ancora lo 0 iniziale), scompaiono i numeri e il bottone rimane vuoto e non fa piu niente.. posto il codice..



#include"stdafx.h"
#define STRICT
#define WIN32_LEAN_AND_MEAN
#include<tchar.h>
#include<iostream>
#include<string>
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
DialogBoxParam(0,_T("MioDialogo"), 0,unaDlgProc,0);
return 0;
}
BOOL CALLBACK unaDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if(uMsg==WM_CLOSE)
{
EndDialog(hwndDlg, 0);
return TRUE;
}
else if(uMsg==WM_COMMAND)
{
WORD wNotifica = HIWORD(wParam);
WORD wId = LOWORD(wParam);
if(wNotifica == STN_CLICKED && wId == 101)
{
int buff[10];
int pTesto;
pTesto = 0;
SendMessage(hwndDlg, WM_GETTEXT, 10, buff[0]);
if(buff[0]>=0&&pTesto<100)
{
pTesto++;
SendMessage(hwndDlg, WM_SETTEXT, 0, (LPARAM)pTesto);
}
else if (pTesto==100)
{
pTesto=000;
SendMessage(hwndDlg, WM_SETTEXT, 0, (LPARAM)pTesto); }
else if(pTesto>100)
{
EndDialog(hwndDlg, 0);
}
return TRUE;
}
}
return FALSE; }


e qui il codice del file .rc correlato..



#include<Windows.h>
MioDialogo DIALOG DISCARDABLE 0, 0, 186, 92
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Un Dialogo vuoto"
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "0", 101, "STATIC", SS_CENTER|WS_BORDER|SS_NOTIFY, 60, 40, 40, 10 END


grazie mille a tutti!!

MItaly
06-04-2012, 18:05
Come speri che pTesto contenga il numero attualmente scritto nella label se prima non converti il testo recuperato in un intero? E analogamente, non puoi impostare direttamente uno static ad un intero con il WM_SETTEXT, devi prima convertire l'intero in testo.

Comunque, dato che questo genere di operazioni sono frequenti sui dialog, esistono le funzioni GetDlgItemInt e SetDlgItemInt che dovrebbero fare al caso tuo.

drasgo
06-04-2012, 18:25
cosi?




BOOL CALLBACK unaDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if(uMsg==WM_CLOSE)
{
EndDialog(hwndDlg, 0);
return TRUE;
}
else if(uMsg==WM_COMMAND)
{
WORD wNotifica = HIWORD(wParam);
WORD wId = LOWORD(wParam);
if(wNotifica == STN_CLICKED && wId == 101)
{
int buff[10];
int pTesto;
pTesto = 0;
SendMessage(hwndDlg, WM_GETTEXT, 10, buff[0]);
int pTesto = GetDlgItemInt(hwndDlg, 101, 0, FALSE);
if(buff[0]>=0&&pTesto<100)
{
pTesto++;
int pTesto = SetDlgItemInt(hwndDlg, 101, 0, FALSE);
SendMessage(hwndDlg, WM_SETTEXT, 0, (LPARAM)pTesto);
}
else if (pTesto==100)
{
pTesto=000;
int pTesto = SetDlgItemInt(hwndDlg, 101, 0, FALSE);
SendMessage(hwndDlg, WM_SETTEXT, 0, (LPARAM)pTesto);
}
else if(pTesto>100)
{
EndDialog(hwndDlg, 0);
}
return TRUE;
}
}
return FALSE;
}

MItaly
07-04-2012, 01:22
Scusa, ma che senso ha la roba che hai scritto? L'hai letta la documentazione delle funzioni che ti ho suggerito?

Loading