Ho un programma che usa le API Win32 ma compilando dà 2 errori di funzioni
non risolte (mciSendString e mciGetErrorString).
Questo è il file cpp:
Questo è il file header: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; }
E questo è il file risorsa: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
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 }

Rispondi quotando