Edit Box?
-
Hy,
Ich wollte nur ein Fenster mit zwei Edit Boxen in denen ich schreiben kann und zwischen denen ich mit Tab wechseln kann.
Nun wenn ich jetzt die Messages (VK_TAB) in den Edit Boxen abfangen will benötige ich doch SetWindowLong. Aber wenn ich das in meinen Code drin habe wird die Box nicht angezeigt.
Warum???
Was mache ich falsch??Mein Code:
#include "Windows.h" LRESULT APIENTRY EditProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam); LRESULT APIENTRY MainProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam); inline void Init(void); WNDPROC oldproc; HWND hwnd; HWND edit1; HWND edit2; HINSTANCE hInst; int APIENTRY WinMain(HINSTANCE hInstx,HINSTANCE hPrev,char linecmd[3],int CmdShow) { MSG msg; hInst = hInstx; Init(); while(GetMessage(&msg,0,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } inline void Init(void) { WNDCLASS wc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+2); wc.hInstance = hInst; wc.hIcon = 0; wc.hCursor = 0; wc.lpfnWndProc = (WNDPROC) MainProc; wc.lpszClassName = "wnd"; wc.lpszMenuName = 0; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); hwnd = CreateWindow("wnd","wnd", WS_OVERLAPPEDWINDOW, 200,200, 400,300,hwnd,0,hInst,0); ShowWindow(hwnd,SW_SHOW); UpdateWindow(hwnd); } LRESULT APIENTRY MainProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { case WM_DESTROY: PostQuitMessage(WM_QUIT); return 0; case WM_CREATE: { edit1 = CreateWindowEx(WS_EX_STATICEDGE,"Edit","edit1", WS_VISIBLE | WS_CHILD, 0,0,200,20,hwnd,0,hInst,0); edit2 = CreateWindow("Edit","edit2", WS_VISIBLE | WS_CHILD, 0,40,200,20,hwnd,0,hInst,0); oldproc = (WNDPROC) SetWindowLong(edit1,GWL_WNDPROC,(LONG)(WNDPROC)EditProc); } return 0; case WM_RBUTTONDOWN: PostQuitMessage(WM_QUIT); return 0; case WM_LBUTTONDOWN: return 0; case WM_PAINT: PAINTSTRUCT ps; BeginPaint(hwnd,&ps); EndPaint(hwnd, &ps); return 0; case WM_COMMAND: { switch(LOWORD(wParam)) { } } return 0; default: return DefWindowProc(hwnd,msg,wParam,lParam); } return 0; } //------------------------------ edit callback --------------------------------- LRESULT CALLBACK EditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { if(VK_TAB)SendMessage(NULL,WM_NEXTDLGCTL,0,0); } CallWindowProc((WNDPROC)oldproc, hwnd, message, wParam, lParam); return 0; }
Danke für eure Hilfe
-
du mußt imho beide editfelder longsetten
-
Such mal hier im Forum nach IsDialogmessage, dann ersparst du dir das mit dem Subclassing.
-
@ crass
WAT???
@ Luckie
Entweder bin ich zu dumm oder es geht net???
-
-
Vielen Dank.
Ich habe WS_TABSTOP vergessen.Noch ne frage du hast zum Thema "Hilfe Fenster" geschrieben das auf deiner Seite
ein tut zum download ist.
Kannst du mal den Link direkt zum Download senden???Danke
Rene
-
http://www.luckie-online.de/delphi/win32apidl.shtml
Bezieht sich allerdings was die Einbindung in den Code angeht auf Delphi.
-
Schade ich dachte es geht dort um das erstellen des Files direct.
Trotzdem Danke.