Newsgroup: it.comp.programmare.win32
Titolo: 2 questiti.

1 - Qualcuno sa darmi qualche indicazione
     su come si programma l'interfaccia
     seriale usando Visual C/C++
     (mi interessano sia documentazioni che
     eventuali esempi)
2 - Qualcuno mi puo' indicare un buon libro
     per la creazione di interfacce grafiche
     sotto windows (sempre usando Visual C/C++).
Grazie in anticipo,
Marco Guidi

 ha scritto nel messaggio
news:3B27F259...@sssup.it...
: 1 - Qualcuno sa darmi qualche indicazione
:      su come si programma l'interfaccia
:      seriale usando Visual C/C++
:      (mi interessano sia documentazioni che
:      eventuali esempi)
Esiste un buon codice Ms d'esempio; dovrebbe chiamarsi Mttty o qualcosa del
genere. In rete si trova abbastanza facilmente.
In ogni caso questo e` un piccolo esempio. Gli ingredienti ci sono, ma va
sviluppato, evidentemente.
susanna
------------
//Example C code Serial communication
#include <windows.h>
DWORD __stdcall listenThread (LPVOID pVoid)
{
    HANDLE hCom4 = (HANDLE) pVoid;
    SetCommMask (hCom4, EV_RXCHAR);
    char buf [1024];
    DWORD dwBytesReaded, event;
    COMSTAT stat;
    OVERLAPPED overlap;
    memset (&overlap, 0, sizeof (overlap));
    HANDLE hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
    while (1)
    {
        WaitCommEvent (hCom4, &event, NULL);
        ClearCommError (hCom4, &event, &stat);
        ReadFile (hCom4, buf, min (1023, stat. cbInQue),
            &dwBytesReaded, &overlap);
        GetOverlappedResult (hCom4, &overlap, &dwBytesReaded, FALSE);
        WriteConsole (hConsole, buf, dwBytesReaded, &dwBytesReaded, NULL);
    }
    return 0;
} // listenThread
int main (int argc, char **argv)
{
    if (argc < 2) return 1;
    OVERLAPPED overlap;
    memset (&overlap, 0, sizeof (overlap));
    HANDLE hCom4  = CreateFile (argv [1],
        GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
    SetupComm (hCom4, 4096, 4096);
    SetCommMask (hCom4, EV_RXCHAR);
    EscapeCommFunction (hCom4, SETDTR);
    DWORD dwThreadID, dwBytesWritten, dwEventsRead;
    HANDLE hThread = CreateThread
        (NULL, 0, listenThread, hCom4, 0, &dwThreadID);
    INPUT_RECORD message;
    char symbol, process = 1, buf [5];
    HANDLE hConsole = GetStdHandle (STD_INPUT_HANDLE);
    while (ReadConsoleInput (hConsole, &message, 1, &dwEventsRead) &&
           process)
    {
        if ((message. EventType == KEY_EVENT) &&
            (message. Event. KeyEvent. bKeyDown))
        {
            symbol = message. Event. KeyEvent. uChar. AsciiChar;
            if (message. Event. KeyEvent. dwControlKeyState &
               (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED))
            {
                switch (symbol)
                {
                    case 'x': process = 0; *buf = 0; break;
                    // ... allow to dispatch more Alt+? ....
                    default: continue;
                }
                symbol = 0;
            }
            if (symbol)
            {
                buf [0] = symbol;
                buf [1] = 0;
            }
            if (*buf)
            {
                dwEventsRead = WriteFile (hCom4, buf,
                    lstrlen (buf), &dwBytesWritten, &overlap);
                WaitForSingleObject (overlap. hEvent, 1000);
                GetOverlappedResult (hCom4, &overlap, &dwBytesWritten,
FALSE);
                *buf = 0;
            }
        }
    }
    TerminateThread (hThread, 1);
    CloseHandle (hThread);
    CloseHandle (hCom4);
    return 0;
} // main

susanna wrote:

Ho notato solo ora la tua risposta.
Ti ringrazio molto
Marco.