我需要创建一个表单(使用CreateWindow函数),而无需使用
Windows API的VCL(或任何可视控件)的任何帮助.
这个表单将有一个InputBox,一个Button和一个BitMap(就像TImage一样).
我无法在互联网上找到任何样本.有没有人知道我可以下载除MSDN之外的样本的好地方?
解决方法
这是一个示例应用程序,它只使用WinApi创建带有静态,编辑和按钮的Windows,我让你显示BitMap显示作为练习.
uses Windows,Messages,SysUtils; var Msg : TMSG; LWndClass : TWndClass; hMainHandle: HWND; hButton : HWND; hStatic : HWND; hEdit : HWND; hFontText : HWND; hFontButton: HWND; procedure ReleaseResources; begin DestroyWindow(hButton); DestroyWindow(hStatic); DestroyWindow(hEdit); DeleteObject(hFontText); DeleteObject(hFontButton); PostQuitMessage(0); end; function WindowProc(hWnd,Msg:Longint; wParam : WPARAM; lParam: LPARAM):Longint; stdcall; begin case Msg of WM_COMMAND: if lParam = hButton then MessageBox(hMainHandle,'You pressed the button Hello','Hello',MB_OK or MB_ICONINFORMATION); WM_DESTROY: ReleaseResources; end; Result:=DefWindowProc(hWnd,Msg,wParam,lParam); end; begin //create the window LWndClass.hInstance := hInstance; with LWndClass do begin lpszClassName := 'MyWinApiWnd'; Style := CS_PARENTDC or CS_BYTEALIGNCLIENT; hIcon := LoadIcon(hInstance,'MAINICON'); lpfnWndProc := @WindowProc; hbrBackground := COLOR_BTNFACE+1; hCursor := LoadCursor(0,IDC_ARROW); end; RegisterClass(LWndClass); hMainHandle := CreateWindow(LWndClass.lpszClassName,'Window Title',WS_CAPTION or WS_MINIMIZEBox or WS_SYSMENU or WS_VISIBLE,(GetSystemMetrics(SM_CXSCREEN) div 2)-190,(GetSystemMetrics(SM_CYSCREEN) div 2)-170,386,200,hInstance,nil); //Create the fonts to use hFontText := CreateFont(-14,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH or FF_SWISS,'Tahoma'); hFontButton := CreateFont(-14,'Tahoma'); //create the static hStatic:=CreateWindow('Static','This is static text,like a TLabel',WS_VISIBLE or WS_CHILD or SS_LEFT,10,360,44,hMainHandle,nil); SendMessage(hStatic,WM_SETFONT,hFontText,0); //create the edit hEdit:=CreateWindowEx(WS_EX_CLIENTEDGE,'Edit','This a Edit like and TEdit',WS_VISIBLE or WS_CHILD or ES_LEFT or ES_AUTOHSCROLL,35,23,nil); SendMessage(hEdit,0); //create the button hButton:=CreateWindow('Button',WS_VISIBLE or WS_CHILD or BS_PUSHBUTTON or BS_TEXT,130,100,28,nil); SendMessage(hButton,hFontButton,0); //message loop while GetMessage(Msg,0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; end.