Salve, ho scritto un programma (un semplice editor di testo) ma non appare
la finestra.
Questo č il codice cpp:
codice:
#include <windows.h>
#include "resource.h"

#define ID_EDIT 1

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

TCHAR szAppName[] = TEXT("PopupEditor");

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR 
lpCmdLine, int nCmdShow)
 {
  HACCEL hAccel;
  HWND hwnd;
  MSG msg;
  WNDCLASS wndclass;

  wndclass.style = CS_HREDRAW | CS_VREDRAW;
  wndclass.lpfnWndProc = WndProc;
  wndclass.cbClsExtra = 0;
  wndclass.cbWndExtra = 0;
  wndclass.hInstance = hInstance;
  wndclass.hIcon = LoadIcon(hInstance, szAppName);
  wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
  wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  wndclass.lpszMenuName = szAppName;
  wndclass.lpszClassName = szAppName;

  RegisterClass(&wndclass); //registrazione della classe

  hwnd = CreateWindow(szAppName, //nome della classe window
       szAppName, //titolo della finestra(barra del titolo)
       WS_OVERLAPPEDWINDOW, //stile window
       GetSystemMetrics(SM_CXSCREEN / 4), //posizione x iniziale
       GetSystemMetrics(SM_CYSCREEN / 4), //posizione y iniziale
       GetSystemMetrics(SM_CXSCREEN / 2), //dimensione x iniziale(larghezza)
       GetSystemMetrics(SM_CXSCREEN / 2), //dimensione y iniziale(altezza)
       NULL, //handle alla finestra genitore
       NULL, //handle al menų della finestra
       hInstance, //handle all'istanza del programma
       NULL);

  ShowWindow(hwnd, nCmdShow); //disegna la finestra sullo schermo, con le 
impostazioni iniziali date dall'utente

  UpdateWindow(hwnd); //disegna l'area client della finestra

  hAccel = LoadAccelerators(hInstance, szAppName);

  //ciclo dei messaggi
  while (GetMessage(&msg, NULL,  0, 0)) //recupera un messaggio dalla coda 
(restituisce FALSE (0) solo per WM_QUIT)
   {
    if (!TranslateAccelerator(hwnd, hAccel, &msg))
     {
      TranslateMessage(&msg); //opera alcune modifiche al messaggio a 
seconda della tastiera
      DispatchMessage(&msg); //invia il messaggio alla window procedure 
appropriata
     }
   }
 return  msg.wParam ;
 }


 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM 
lParam)
  {
   static HWND hwndEdit;
   int iSeleziona, iAbilita;

   switch(message)
    {
     case WM_CREATE:
      hwndEdit = CreateWindow(TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | 
WS_HSCROLL | WS_VSCROLL | WS_BORDER |
            ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
            0, 0, 0, 0, hwnd, (HMENU)ID_EDIT, ((LPCREATESTRUCT) 
lParam)->hInstance, NULL);

      return 0;

     case WM_SETFOCUS:
      SetFocus(hwndEdit);
      return 0;

     case WM_SIZE:
      //le dimensione dell'edit control sono settate alle dimensioni della 
finestra principale
      MoveWindow(hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
      return 0;

     case WM_INITMENUPOPUP:
      if (lParam == 1)
       {
        //SendMessage restituisce non-zero se l'edit control puā eseguire 
un'azione "annulla" e quindi l'opzione č abilitata;
        //altrimenti l'opzione č grigia(disabilitata)
        EnableMenuItem((HMENU) wParam, IDM_ANNULLA1, SendMessage(hwndEdit, 
EM_CANUNDO, 0, 0)  ? MF_ENABLED : MF_GRAYED);

        //IsClipboardFormatAvailable con CF_TEXT determina se l'area client 
contiene correntemente testo
        EnableMenuItem((HMENU) wParam, IDM_INCOLLA1, 
IsClipboardFormatAvailable(CF_TEXT) ? MF_ENABLED : MF_GRAYED);

        //abilita le opzioni Taglia, Copia e Elimina solo se il testo 
nell'edit control č stato selezionato
        iSeleziona = SendMessage(hwndEdit, EM_GETSEL, 0, 0);

        //LOWORD(iSeleziona) č la posizione del primo carattere selezionato, 
HIWORD(iSeleziona) č la posizione del carattere seguente la selezione
        //se sono uguali nessun testo č stato selezionato
        if (HIWORD(iSeleziona) == LOWORD(iSeleziona))
         iAbilita = MF_GRAYED;
        else
         iAbilita = MF_ENABLED;

        EnableMenuItem((HMENU) wParam, IDM_TAGLIA1, iAbilita);
        EnableMenuItem((HMENU) wParam, IDM_COPIA1, iAbilita);
        EnableMenuItem((HMENU) wParam, IDM_ELIMINA1, iAbilita);

        return 0;
       }
      break;

     case WM_COMMAND:
      if (lParam)
       {
        //se l'edit control č fuori dallo spazio di inserimento visualizza 
una finestra di messaggio di errore
        if (LOWORD(lParam) == ID_EDIT && (HIWORD(wParam) == EN_ERRSPACE || 
HIWORD(wParam) == EN_MAXTEXT))
         MessageBox(hwnd, TEXT("Edit Control fuori dallo spazio!"), 
szAppName, MB_OK | MB_ICONSTOP);
        return 0;
       }
      else switch(LOWORD(wParam))
       {
        case IDM_NUOVO1:
        case IDM_APRI1:
        case IDM_SALVA1:
        case IDM_SALVA_CON_NOME___1:
        case IDM_STAMPA1:
         MessageBeep(0);
         return 0;

        case IDM_ESCI1:
         SendMessage(hwnd, WM_CLOSE, 0, 0);
         return 0;

        case IDM_ANNULLA1:
         SendMessage(hwnd, WM_UNDO, 0, 0);
         return 0;

        case IDM_TAGLIA1:
         SendMessage(hwnd, WM_CUT, 0, 0);
         return 0;

        case IDM_COPIA1:
         SendMessage(hwnd, WM_COPY, 0, 0);
         return 0;

        case IDM_INCOLLA1:
         SendMessage(hwnd, WM_PASTE, 0, 0);
         return 0;

        case IDM_ELIMINA1:
         SendMessage(hwnd, WM_CLEAR, 0, 0);
         return 0;

        case IDM_SELEZIONA_TUTTO1:
         SendMessage(hwnd, EM_SETSEL, 0, -1);
         return 0;

        case IDM_AIUTO1:
         MessageBox(hwnd, TEXT("Aiuto non ancora implementato!"), szAppName, 
MB_OK | MB_ICONEXCLAMATION);
         return 0;

        case IDM_INFORMAZIONI_SU___1:
         MessageBox(hwnd, TEXT("PopupEditor (c) Minnozzi Corrado, 2009"), 
szAppName, MB_OK | MB_ICONINFORMATION);
         return 0;
       }
      break;

     //questi 2 messaggi sono i soli che bisogna processare per chiedere 
conferma all'utente prima di chiudere un programma
     case WM_CLOSE:
       MessageBox(hwnd, TEXT("Sei sicuro di uscire da PopupEditor?"), 
szAppName, MB_YESNO | MB_ICONQUESTION);
       DestroyWindow(hwnd);
      return 0;

     case WM_QUERYENDSESSION:
       MessageBox(hwnd, TEXT("Sei sicuro di uscire da PopupEditor?"), 
szAppName, MB_YESNO | MB_ICONQUESTION);
       return 0;

     case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
    }
   return DefWindowProc(hwnd, message, wParam, lParam);
  }
Questo č il file resorce.h:
codice:
#ifndef IDC_STATIC
#define IDC_STATIC (-1)
#endif

#define IDR_MENU1                               100
#define IDM_NUOVO1                              40000
#define IDM_APRI1                               40001
#define IDM_SALVA1                              40002
#define IDM_SALVA_CON_NOME___1                  40003
#define IDM_STAMPA1                             40004
#define IDM_ESCI1                               40005
#define IDM_ANNULLA1                            40006
#define IDM_TAGLIA1                             40007
#define IDM_COPIA1                              40008
#define IDM_INCOLLA1                            40009
#define IDM_SELEZIONA_TUTTO1                    40010
#define IDM_ELIMINA1                            40011
#define IDM_AIUTO1                              40012
#define IDM_INFORMAZIONI_SU___1                 40013
E questo č il file di risorse:
codice:
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"

//
// Menu resources
//
LANGUAGE 16, SUBLANG_DEFAULT
IDR_MENU1 MENU
{
    POPUP "File"
    {
        MENUITEM "Nuovo", IDM_NUOVO1
        MENUITEM "Apri", IDM_APRI1
        MENUITEM "Salva", IDM_SALVA1
        MENUITEM "Salva con nome...", IDM_SALVA_CON_NOME___1
        MENUITEM "Stampa", IDM_STAMPA1
        MENUITEM "Esci", IDM_ESCI1
    }
    POPUP "Modifica"
    {
        MENUITEM "Annulla", IDM_ANNULLA1
        MENUITEM "Taglia", IDM_TAGLIA1
        MENUITEM "Copia", IDM_COPIA1
        MENUITEM "Incolla", IDM_INCOLLA1
        MENUITEM "Seleziona tutto", IDM_SELEZIONA_TUTTO1
        MENUITEM "Elimina", IDM_ELIMINA1
    }
    POPUP "?"
    {
        MENUITEM "Aiuto", IDM_AIUTO1
        MENUITEM "Informazioni su...", IDM_INFORMAZIONI_SU___1
    }
}