+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 6 su 6

come fare una finestra in c con la libreria windows.h

  1. #1
    giovapc non è in linea Novello
    salve a tutti come da titolo volevo sapere come si poteva fare in c una finestra (in cui poi viene visualizzato il programma fatto) con la libreria windows.h ho cercato su internet ma non cio capito molto,ah dimenticavo uso windos e come compilatore il visual c

  2. #2
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    La programmazione win32 è qualcosa di ben diverso dalle applicazioni console (quelle che puoi vedere in una schermata dos). Gli elementi di base sono parecchi e devi subito fare il conto con una programmazione non sequenziale (un'applicazione win32 minimale che apre una finestra prevede due procedure, una delle quali, parallela alla main, gestisce i messaggi che arriveranno alla finestra).

    Detto questo, al posto della main hai una WinMain, nella quale dovrai creare una WNDCLASS (o WNDCLASSEX), registrarla, e quindi creare una finestra con l'API CreateWindow. A quel punto la WinMain rimane in genere in un ciclo in attesa del messaggio di chiusura, gestendo eventuali acceleratori di tastiera e altri ammennicoli (TranslateMessage, DispatchMessage).
    Nella wndclass invece è presente un puntatore a funzione (la cosiddetta WndProc) che gestirà i messaggi in arrivo alla finestra (della forma WM_<xxx>).

    La carne al fuoco è parecchia, anche per un'applicazione relativamente piccola. Anche solo per scrivere qualcosa sulla finestra non puoi ricorrere a printf o alcuna altra funzione di libreria standard.

    La cosa migliore forse è rintracciare qualche tutorial relativo alle basi della programmazione win32 (non è nulla di trascendentale, una volta che hai capito come gestire le cose, ma il primo impatto è sempre abbastanza traumatico) e quindi procedere a piccoli passi, cercando di abituarsi al sistema sottostante.
    Poi, ovviamente, puoi postare qui le perplessità che incontri lungo la strada...

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  3. #3
    giovapc non è in linea Novello
    io non ho capito una cosa ma quando creo un nuovo file devo fare qualcosa o basta che scrivo il normale codice per fare la finestra telo chiedo perchè per fare i programmi devi uno nuovo documento di testo e poi salvarlo come .c perchè altrimenti mi da errore e non so perchè

  4. #4
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Hai detto che usi "Visual C"... immagino che parli del Microsoft Visual C++ (.NET 2003, .NET 2005 o precedente, la versione 5 o 6).
    Hai un'IDE a disposizione in cui creare una soluzione, aggiungere un progetto alla soluzione, ed aggiungere sorgenti (.cpp - i .c lasciali da parte) al progetto.

    Il codice lo scrivi, in formato testo, nel sorgente... certo nulla ti vieta di usare il notepad, ma la cosa è piuttosto masochista. Per l'estensione, in teoria potresti chiamare il tuo sorgente anche .pippo... basta che il compilatore sappia di che si tratta. Meglio se rimani attaccato all'estensione giusta (anche perché non vedo l'utilità di cambiare estensione).
    Ricorda che la programmazione win32 è orientata specificatamente al C++. I sorgenti C stretti vengono certamente "digeriti" e compilati, ma visto che non hai vincoli di compatibilità all'indietro (o verso altri sistemi) non è il caso di scrivere codice strettamente C ed imparare ad usare, invece, le potenzialità del c++.

    L'IDE compila il progetto (formato in genere da un bel numero di sorgenti), linka alle librerie specifiche e produce l'eseguibile. E'poi possibile far partire il programma da dentro l'IDE in modalità debug per poter sfruttare l'utilissimo debugger.

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  5. #5
    giovapc non è in linea Novello
    mi sn risolto molti problemi usando il dev c++ xkè mi da un modello gia preimpostato di finestra il codice è questo
    #include <windows.h>
    /* Declare Windows procedure */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    /* Make the class name into a global variable */
    char szClassName[ ] = "WindowsApp";
    int WINAPI WinMain (HINSTANCE hThisInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpszArgument,
    int nFunsterStil)
    {
    HWND hwnd; /* This is the handle for our window */
    MSG messages; /* Here messages to the application are saved */
    WNDCLASSEX wincl; /* Data structure for the windowclass */
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
    wincl.style = CS_DBLCLKS; /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);
    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL; /* No menu */
    wincl.cbClsExtra = 0; /* No extra bytes after the window class */
    wincl.cbWndExtra = 0; /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
    return 0;
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
    0, /* Extended possibilites for variation */
    szClassName, /* Classname */
    "Windows App", /* Title Text */
    WS_OVERLAPPEDWINDOW, /* default window */
    CW_USEDEFAULT, /* Windows decides the position */
    CW_USEDEFAULT, /* where the window ends up on the screen */
    544, /* The programs width */
    375, /* and height in pixels */
    HWND_DESKTOP, /* The window is a child-window to desktop */
    NULL, /* No menu */
    hThisInstance, /* Program Instance handler */
    NULL /* No Window Creation data */
    );
    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
    /* Translate virtual-key messages into character messages */
    TranslateMessage(&messages);
    /* Send message to WindowProcedure */
    DispatchMessage(&messages);
    }
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
    }

    /* This function is called by the Windows function DispatchMessage() */
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch (message) /* handle the messages */
    {
    case WM_DESTROY:
    PostQuitMessage (0); /* send a WM_QUIT to the message queue */
    break;
    default: /* for messages that we don't deal with */
    return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
    }





    io ora volevo sapere come si puo a fare a insere in quella finestra un testo o altro ho provato con #include<iostream> e con cout<<"ciao"; però non mi da nulla mi appare solo la finestra mi sai dire il perchè o dove sbaglio

  6. #6
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Innanzitutto meglio abituarsi qui sul forumi, soprattutto quando il codice è lungo, ad incapsularlo nei tag appositi [code] e [/code].

    Detto questo, quello che hai postato è uno scheletro di applicazione win32 minimale. Come ti ho ribadito nel primo post, non puoi usare le funzioni di libreria standard per scrivere su una finestra. Scordati quindi cout, le printf e tutto quanto riguarda la programmazione tradizionale.

    Ogni elemento di una finestra è a sua volta una finestra (ha un HWND). Puoi aggiungere una label o un edit creando un controllo apposito (sempre con la CreateWindow) e poi impostarne il testo... in alternativa puoi ricorrere alle GDI ed usare la TextOut per scrivere direttamente sul DC grafico della client area (potresti provare ad usare la TextOut nella WM_PAINT - ad ogni ridisegno della finestra scriverà sul dc della client area).

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. VB6 e Windows 7 64 bit - Problema libreria
    Da vbrookie nel forum Visual Basic 6
    Risposte: 12
    Ultimo Post: 31-01-2015, 23:16
  2. Fare uno scan antivirus in windows 8 manuale
    Da titanic nel forum Microsoft Windows
    Risposte: 2
    Ultimo Post: 05-02-2013, 09:23
  3. Risolto: Windows 7: nessun utente nel gruppo Administrators. Come fare?
    Da cyberlaundry nel forum Microsoft Windows
    Risposte: 4
    Ultimo Post: 25-02-2010, 23:02
  4. [vb6] scrivere su una finestra di windows attiva
    Da dolcissimo nel forum Visual Basic 6
    Risposte: 11
    Ultimo Post: 18-09-2007, 15:01
  5. Escludere la finestra accesso a windows
    Da Sportyman nel forum Microsoft Windows
    Risposte: 1
    Ultimo Post: 09-10-2004, 18:54