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