/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Simpelt Windows program
Fra : Ulrik Jensen


Dato : 06-02-02 11:59

Hej

Jeg er ved at lege med Windows API'en, for at lære at skrive mine egne
programmer i C++, og nu er jeg stødt på et problem. Jeg compiler i
Visual C++, og mit program ser ud som følger:

//********MAIN.CPP************BEGIN
// main.cpp - mit windows program opbygget fra bunden af
#include "windows.h"

HWND mWnd;
HINSTANCE hInst;

#define CMD_SHOW   1002
#define EDT_SHOW   2344
#define LST_SHOW    3400   

void ShowError(void)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Display the string.
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
}

int MessageLoop()
{
MSG msg;

while (GetMessage(&msg, NULL, 0, 0) == TRUE) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

HWND eWnd, bWnd, lWnd;

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg , WPARAM wParam , LPARAM lParam )
{
   //
   switch(msg)
   {
   case WM_COMMAND:
      switch((int)wParam)
      {
         case CMD_SHOW:
            // der er trykket på min knap
            char input[255];
            GetDlgItemText(hWnd,EDT_SHOW,input, 255);
            //MessageBox(0,input,"Test",0);
            SendDlgItemMessage(hWnd, LST_SHOW, LB_ADDSTRING, NULL, (LPARAM)input);
            break;
      }
      break;
   case WM_DESTROY:
      PostQuitMessage(0);
   }
   return DefWindowProc(hWnd, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hCurrent, HINSTANCE hPrevious, LPSTR cmdline, int showstyle)
{
WNDCLASS myWindow;
   // sæt klassen op
   hInst = hCurrent;
myWindow.style = CS_HREDRAW | CS_VREDRAW | CS_PARENTDC;
myWindow.lpfnWndProc = MainWndProc;
myWindow.cbClsExtra =0;
myWindow.cbWndExtra = 0;
myWindow.hInstance = hCurrent;
myWindow.hIcon = LoadIcon(NULL, IDI_APPLICATION);
myWindow.hCursor = LoadCursor(NULL, IDC_ARROW);
myWindow.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
myWindow.lpszMenuName = NULL;
myWindow.lpszClassName = "QCCMyWindow";
   // registrer den
   if (RegisterClass(&myWindow) == 0)
   {
      // Der er sket en fejl....
      ShowError();
      return 1;
   }
// Lav vinduet....
   mWnd = CreateWindow("QCCMyWindow",
                  "Hello Windows World",
                  WS_DLGFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
                  CW_USEDEFAULT, CW_USEDEFAULT, 210,250,
                  NULL, NULL, hCurrent, NULL);

   if (!mWnd)
   {
      // Der er sket en fejl....
      ShowError();
      return 1;
   }

   ShowWindow(mWnd, SW_SHOW);
   UpdateWindow(mWnd);

   // komponenter må åbenbart IKKE laves i WM_CREATE, men tilgengæld må de laves her
   // hvis man laver dem i WM_PAINT, så går det galt, de opdaterer ikke rigtigt
   eWnd = CreateWindow("EDIT","TEST",WS_CHILD | WS_VISIBLE | WS_BORDER,0,200,80,20,mWnd,(HMENU) EDT_SHOW,hInst,NULL);
   bWnd = CreateWindow("BUTTON","Muahahaha",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,100,200,100,20,mWnd,(HMENU) CMD_SHOW,hInst,NULL);
   lWnd = CreateWindow("LISTBOX","Hmm",WS_CHILD | LBS_NOTIFY | WS_BORDER | WS_VISIBLE, 0,0,200,200,mWnd, (HMENU) LST_SHOW, hInst, NULL);

// Kør message-loopet..   
return MessageLoop();
}
//********MAIN.CPP************END

Programmet compiler rigtigt nok, og det virker også som det skal ( ikke at der er den store funktionalitet endnu ) men programmet ser utrolig Win3.1 ud når jeg kører det, jeg har ingen mulighed for at tabbe
imellem componenter, og skrifttypen er heller ikke den der er som standard i andre programmer....

Hvad mangler jeg? gør jeg noget forkert?

På forhånd tak.

--
Ulrik Jensen
ulrik@qcom.dk
http://www.qcom.dk/2a/film - mit filmsite


 
 
Ole Nielsby (06-02-2002)
Kommentar
Fra : Ole Nielsby


Dato : 06-02-02 16:39


Ulrik Jensen <ulrik@qcom.dk> skrev:

> jeg har ingen mulighed for at tabbe imellem componenter,

Se docs for funktionen IsDialogMessage().

ON/***Fjern sneglen fra min svaradresse***



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408514
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste