Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    19

    programma con API non funzionante!

    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..

    Codice PHP:
    #include"stdafx.h" 
    #define STRICT
     #define WIN32_LEAN_AND_MEAN
     #include<tchar.h> 
    #include<iostream>
     #include<string> 
    #include <windows.h>    
     
    int WINAPI WinMain(HINSTANCE hInstanceHINSTANCE hPrevInstanceLPSTR lpCmdLineint nCmdShow
    {
          
    DialogBoxParam(0,_T("MioDialogo"), 0,unaDlgProc,0);  
        return 
    0;
     } 
    BOOL CALLBACK unaDlgProc(HWND hwndDlgUINT uMsgWPARAM wParamLPARAM lParam)  { 
         if(
    uMsg==WM_CLOSE)  
        {      
        
    EndDialog(hwndDlg0); 
            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(hwndDlgWM_GETTEXT10buff[0]);
              if(
    buff[0]>=0&&pTesto<100)     
            {             
        
    pTesto++;      
        
    SendMessage(hwndDlgWM_SETTEXT0, (LPARAM)pTesto);     
        }     
        else if (
    pTesto==100)     
        {     
            
    pTesto=000;     
            
    SendMessage(hwndDlgWM_SETTEXT0, (LPARAM)pTesto);         }         
    else if(
    pTesto>100)     
        {     
        
    EndDialog(hwndDlg0); 
            }         
    return 
    TRUE;     
        }  
        }     
    return 
    FALSE; } 
    e qui il codice del file .rc correlato..

    Codice PHP:
    #include<Windows.h>
     
    MioDialogo DIALOG DISCARDABLE 0018692  
    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_NOTIFY60404010   END 
    grazie mille a tutti!!

  2. #2
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    19
    cosi?


    Codice PHP:
    BOOL CALLBACK unaDlgProc(HWND hwndDlgUINT uMsgWPARAM wParamLPARAM lParam

        if(
    uMsg==WM_CLOSE
        { 
            
    EndDialog(hwndDlg0);
            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(hwndDlgWM_GETTEXT10buff[0]); 
            
    int pTesto GetDlgItemInt(hwndDlg1010FALSE);
            if(
    buff[0]>=0&&pTesto<100)
                {
                    
    pTesto++; 
            
    int pTesto SetDlgItemInt(hwndDlg1010FALSE);
            
    SendMessage(hwndDlgWM_SETTEXT0, (LPARAM)pTesto);
            }
            else if (
    pTesto==100)
            {
                
    pTesto=000;
                
    int pTesto SetDlgItemInt(hwndDlg1010FALSE);
                
    SendMessage(hwndDlgWM_SETTEXT0, (LPARAM)pTesto);
            }
            else if(
    pTesto>100)
            {
            
    EndDialog(hwndDlg0);
            }
            return 
    TRUE;
            } 
        }
        return 
    FALSE;


  4. #4
    Scusa, ma che senso ha la roba che hai scritto? L'hai letta la documentazione delle funzioni che ti ho suggerito?
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.