Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    216

    [API Win32 c++]errori di compilazione

    Ho un programma che usa le API Win32 ma compilando dà 2 errori di funzioni
    non risolte (mciSendString e mciGetErrorString).
    Questo è il file cpp:
    codice:
    #include <windows.h>
    #include "resource.h"
    
    #define ID_TIMER 1
    
    BOOL CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM);
    
    TCHAR szNomeApp[] = TEXT("TestMCI");
    TCHAR szTitolo[] = TEXT("Programma che mostra alcune bitmap nell'area client usando una DLL");
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow)
    	{
    		if(-1 == DialogBox(hInstance, szNomeApp, NULL, DialogProc))
    		{
    			MessageBox(NULL, TEXT("Questo programma richiede Windows NT!"), szNomeApp, MB_ICONERROR);
    		}
    		return 0;
    	}
    
    BOOL CALLBACK DialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	static HWND hwndModifica;
    	int iCarattereInizio, iCarattereFine, iLineaInizio, iLineaFine, iCarattere, iLinea, iLunghezza;
    	MCIERROR erroreMci;
    	RECT rect;
    	TCHAR szComando[1024], szRitorno[1024], szErrore[1024], szBuffer[32];
    
    	switch(message)
    	{
    		case WM_INITDIALOG:
    			GetWindowRect(hwnd, &rect);
    			SetWindowPos(hwnd, NULL, (GetSystemMetrics(SM_CXSCREEN) - rect.right + rect.left) / 2,
    				(GetSystemMetrics(SM_CYSCREEN) - rect.bottom + rect.top) / 2, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
    
    			hwndModifica = GetDlgItem(hwnd, IDC_EDIT_MAIN);
    
    			SetFocus(hwndModifica);
    			return FALSE;
    
    		case WM_COMMAND:
    			switch(LOWORD(wParam))
    			{
    				case IDOK:
    					SendMessage(hwndModifica, EM_GETSEL, (WPARAM)&iCarattereInizio, (LPARAM)&iCarattereInizio);
    
    					iLineaInizio = SendMessage(hwndModifica, EM_LINEFROMCHAR, iCarattereInizio, 0);
    					iLineaFine = SendMessage(hwndModifica, EM_LINEFROMCHAR, iCarattereFine, 0);
    
    					for(iLinea = iLineaInizio; iLinea <= iLineaFine; iLinea++)
    					{
    						*(WORD *)szComando = sizeof(szComando) / sizeof(TCHAR);
    
    						iLunghezza = SendMessage(hwndModifica, EM_GETLINE, iLinea, (LPARAM)szComando);
    
    						szComando[iLunghezza] = '\0';
    
    						if(iLunghezza == 0)
    							continue;
    
    						erroreMci = mciSendString(szComando, szRitorno, sizeof(szRitorno) / sizeof(TCHAR), hwnd);
    
    						SetDlgItemText(hwnd, IDC_EDIT_RITORNO, szRitorno);
    
    						mciGetErrorString(erroreMci, szErrore, sizeof(szErrore) / sizeof(TCHAR));
    
    						SetDlgItemText(hwnd, IDC_EDIT_ERRORE, szErrore);
    					}
    
    					iCarattere = SendMessage(hwndModifica, EM_LINEINDEX, iLineaFine, 0);
    					iCarattere += SendMessage(hwndModifica, EM_LINELENGTH, iCarattereFine, 0);
    
    					SendMessage(hwndModifica, EM_SETSEL, iCarattere, iCarattere);
    
    					SendMessage(hwndModifica, EM_REPLACESEL, FALSE, (LPARAM)TEXT("\r\n"));
    
    					SetFocus(hwndModifica);
    
    					return TRUE;
    
    				case IDCANCEL:
    					EndDialog(hwnd, 0);
    					return TRUE;
    
    				case IDC_EDIT_MAIN:
    					if(HIWORD(wParam) == EN_ERRSPACE)
    					{
    						MessageBox(hwnd, TEXT("Controllo dell'errore fuori dallo spazio"), szNomeApp, MB_OK | MB_ICONINFORMATION);
    						return TRUE;
    					}
    					break;
    			}
    			break;
    
    		case MM_MCINOTIFY:
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_MESSAGGIO), TRUE);
    
    			wsprintf(szBuffer, TEXT("ID Device = %i"), lParam);
    
    			SetDlgItemText(hwnd, IDC_NOTIFY_ID, szBuffer);
    
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_ID), TRUE);
    
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_SUCCESSFUL), wParam & MCI_NOTIFY_SUCCESSFUL);
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_SUPERSEDED), wParam & MCI_NOTIFY_SUPERSEDED);
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_ABORTED), wParam & MCI_NOTIFY_ABORTED);
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_FAILURE), wParam & MCI_NOTIFY_FAILURE);
    
    			SetTimer(hwnd, ID_TIMER, 5000, NULL);
    			return TRUE;
    
    		case WM_TIMER:
    			KillTimer(hwnd, ID_TIMER);
    
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_MESSAGGIO), FALSE);
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_ID), FALSE);
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_SUCCESSFUL), FALSE);
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_SUPERSEDED), FALSE);
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_ABORTED), FALSE);
    			EnableWindow(GetDlgItem(hwnd, IDC_NOTIFY_FAILURE), FALSE);
    
    			return TRUE;
    
    		case WM_SYSCOMMAND:
    			switch(LOWORD(wParam))
    			{
    				case SC_CLOSE:
    					EndDialog(hwnd, 0);
    					return TRUE;
    			}
    			break;
    		}
    		return FALSE;
    }
    Questo è il file header:
    codice:
    #ifndef IDC_STATIC
    #define IDC_STATIC (-1)
    #endif
    
    #define IDD_DIALOG1                             100
    #define IDC_EDIT_MAIN                           1005
    #define IDC_EDIT_RITORNO                        1006
    #define IDC_EDIT_ERRORE                         1007
    #define IDC_NOTIFY_ID                           1008
    #define IDC_NOTIFY_SUCCESSFUL                   1009
    #define IDC_NOTIFY_SUPERSEDED                   1010
    #define IDC_NOTIFY_ABORTED                      1011
    #define IDC_NOTIFY_FAILURE                      1012
    #define IDC_NOTIFY_MESSAGGIO                    1013
    #define IDC_SEGNALE_ID                          1014
    #define IDC_SEGNALE_PARAM                       1015
    #define IDC_SEGNALE_MESSAGGIO                   1016
    #define IDC_DEVICE		            1017
    E questo è il file risorsa:
    codice:
    #include <windows.h>
    #include "resource.h"
    
    // Dialog resources
    
    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    IDD_DIALOG1 DIALOG 0, 0, 275, 324
    STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU
    CAPTION "Dialog"
    FONT 8, "Ms Shell Dlg"
    {
        DEFPUSHBUTTON   "OK", IDOK, 53, 305, 50, 14
        PUSHBUTTON      "Chiudi", IDCANCEL, 180, 305, 50, 14
        EDITTEXT        IDC_EDIT_MAIN, 5, 5, 265, 125, WS_VSCROLL | ES_AUTOHSCROLL | ES_MULTILINE
        LTEXT           "Stringa di ritorno:", IDC_STATIC, 5, 144, 54, 8, SS_LEFT
        LTEXT           "Stringa di errore:", IDC_STATIC, 150, 144, 52, 8, SS_LEFT
        EDITTEXT        IDC_EDIT_RITORNO, 5, 157, 120, 50, ES_AUTOHSCROLL | ES_MULTILINE | ES_READONLY
        EDITTEXT        IDC_EDIT_ERRORE, 150, 157, 120, 50, ES_AUTOHSCROLL | ES_READONLY
        GROUPBOX        "Messaggio MM_MCINOTIFY", IDC_STATIC, 5, 218, 265, 78
        LTEXT           "MCI_NOTIFY_SUCCESSFUL", IDC_NOTIFY_SUCCESSFUL, 28, 255, 94, 8, SS_LEFT
        LTEXT           "MCI_NOTIFY_ABORTED", IDC_NOTIFY_ABORTED, 148, 255, 82, 8, SS_LEFT
        LTEXT           "MCI_NOTIFY_SUPERSEDED", IDC_NOTIFY_SUPERSEDED, 28, 277, 97, 8, SS_LEFT
        LTEXT           "MCI_NOTIFY_FAILURE", IDC_NOTIFY_FAILURE, 152, 277, 78, 8, SS_LEFT
        LTEXT           "", IDC_NOTIFY_ID, 26, 236, 1, 8, SS_LEFT
    }

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Aggiungi i riferimenti a Winmm.lib e includi Winmm.h
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    216
    Si grazie ho messo #pragma comment(lib, "Winmm.lib"); e adesso va

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Non ci vuole il ;
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    216
    si hai ragione grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.