15. september 2002 - 19:23
Der er
4 kommentarer og
2 løsninger
2 i en om C++ programmering
Hejsa...
1. Hvordan kan man faa sit simple program:
#include <iostream.h>
int main()
{
cout << "Hej med dig...";
return 0;
}
Til at kunne koere i Windows (altsaa ikke i Dos Promten)?
2. Er Visual C++ saadan en WYSIWYG editor (altså hvor man kan indsætte knapper og tekstbokse og sådan noget direkte på en form, ligesom delphi f.eks.)
16. september 2002 - 07:19
#1
1>
det er mere besværligt da der skal kode til at oprette et vindue og komponenter(andre vinduer..) der skal vises i vinduet.
hvordan havde du forestillet dit at "Hej med dig..." skulle vises på skærmen ?
sådan her:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Hej med dig...", "Besked fra program:", MB_OK);
return 0;
}
..eller ?
2>
ja, du kan godt sætte knapper på vinduer i vc++, men der findes mange andre programmer der har ca. samme funktion (wedit er bladt mange - men kun til win32). Det der er afgørende er om du vil benytte mfc eller win32.
mfc er et framework der er bygget op på win32 med det mål at gøre GUI programmeringen nemmere - om det så er nemmere synes jeg afhænger af projektets størrelse :-)
16. september 2002 - 09:16
#2
2>
Du kan godt smide knapper osv. på dialogbox'e uden brug af MFC, men det fungerer ikke på samme måde som Borland C++ Builder eller Visual Basic. Du kan ikke bare dobbeltklikke og så se koden for eventen, men skal selv lave alt det trivielle kode.
Jeg vil ikke kalde MSVC++ for en WYSIWYG editor, selvom der ER en del hjælpeværktøjer...
16. september 2002 - 09:21
#3
1> For at lave et vindue, kan du prøve at bruge nedenstående:
#include <windows.h>
const char g_szClassName[] = "myWindowClass";
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static char szText[100];
HDC hdc;
RECT rect;
switch(msg)
{
case WM_PAINT:
hdc = GetDC(hwnd);
strcpy(szText, "Hej med dig!");
TextOut(hdc, 10, 10, szText, strlen(szText));
GetClientRect(hwnd, &rect);
ValidateRect(hwnd, &rect);
ReleaseDC(hwnd, hdc);
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"The title of my window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
17. september 2002 - 09:29
#5
Det er nok fordi du har lavet et konsol-projekt. Du skal
1)lave et 'Win32 Applikation' projekt:
File->New->Win32 Application
2)lave en ny source-fil:
File->New->C++ Source File.
Så kan du bare paste ovenstående kode ind i source-filen. Det er lavet i Visual C++ 6.0 og er standard windows-kode så det skal virke...