On Fri, 27 Feb 2004 21:12:35 +0100, Morten Bakkedal
<news20040522@bakkeland.dk> wrote:
>Håber det er i orden med et lille spørgsmål om Win32-API'en.
>
>Jeg skal lave et lille simpelt program, der skal tage imod et brugernavn
>og en adgangskode. I API'en findes funktionen MessageBox, der kan tage
>imod svar på simple ja/nej-spørgsmål. Jeg havde forestillet mig, at der
>fandtes en tilsvarende funktion, der kunne tage imod en streng, men det er
>ikke lykkedes mig at finde den.
>
>Findes en sådan funktion eller spilder jeg min tid ved at lede videre?
>
>Jeg vil helst have at det skal være så simpelt som muligt.
>
>Morten
Jeg er ikke stødt på en sådan funktion. MessageBox er ikke særlig
fleksibel - man kan kun sætte en tekst, en eller flere knapper og så
evt. en icon på. Med Win32-API'en er man nødt til at bygge sin
dialog-box selv. For at bygge selve dialogen op har jeg brugt
resource-editoren og dialogen popper op når man kalder DialogBox(...).
Mvh
Thomas
--------------- kode ------------------
/***********************/
/* login.rc */
/***********************/
#include "resource.h"
#include "afxres.h"
LOGIN DIALOGEX 32, 32, 208, 123
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Enter password:",IDC_STATIC,15,54,82,12
EDITTEXT IDS_USERNAME,15,26,160,13,ES_AUTOHSCROLL
LTEXT "Username:",IDC_STATIC,15,14,82,12
EDITTEXT IDS_PASSWORD,15,66,160,13,ES_AUTOHSCROLL
DEFPUSHBUTTON "OK",IDOK,35,97,50,14
PUSHBUTTON "Cancel",IDCANCEL,103,98,50,14
END
/***********************/
/* resource.h */
/***********************/
#ifndef _resource_h
#define _resource_h
#define IDM_INPUT 1000
#define IDS_USERNAME 1001
#define IDS_PASSWORD 1002
#endif
/***********************/
/* login.c */
/***********************/
#include <windows.h>
#include "resource.h"
static HINSTANCE hInst;
static HWND hMain;
static char username[50];
static char password[50];
LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM
lParam)
{
switch (msg)
{
case WM_INITDIALOG:
return 1;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
GetDlgItemText(hDlg, IDS_USERNAME, username, 50);
GetDlgItemText(hDlg, IDS_PASSWORD, password, 50);
EndDialog (hDlg, 0);
return 1;
case IDCANCEL:
EndDialog (hDlg, 0);
return 1;
}
break;
}
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM
lParam)
{
switch (msg)
{
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDM_INPUT:
DialogBox(hInst, TEXT ("LOGIN"), hWnd, (WNDPROC)DlgProc);
MessageBox(hWnd, username, "username", MB_OK);
MessageBox(hWnd, password, "password", MB_OK);
break;
}
return 0;
case WM_DESTROY :
PostQuitMessage(0);
return 0;
}
return DefWindowProc (hWnd, msg, wParam, lParam);
}
Menu()
{
HMENU hPop;
HMENU hMenu;
hPop = CreateMenu();
hMenu = CreateMenu();
AppendMenu(hPop, MF_STRING, IDM_INPUT, "Input");
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hPop,"Test");
SetMenu(hMain, hMenu);
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MSG msg ;
WNDCLASS wndclass ;
hInst = hInstance;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = NULL;
wndclass.hCursor = NULL;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = "Login";
RegisterClass (&wndclass);
hMain = CreateWindow ("Login", TEXT ("Input Dialog"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
Menu();
ShowWindow (hMain, iCmdShow) ;
UpdateWindow (hMain) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return (int)msg.wParam ;
}
|