0/5 (14 avis)
Vue 4 390 fois - Téléchargée 314 fois
#include <windows.h> HINSTANCE hinst; HWND hmain, hed, hst; char szbuff[24]; WNDPROC oldProc; // PROCEDURE ORIGINE HBRUSH hbrEdit[2]; DWORD idxBr = 0; char *szappname = "SubclassEdit"; char *szstclass = "STATIC"; char *szedclass = "EDIT"; // ICI FONCTION DE SOUS CLASSEMENT LRESULT CALLBACK EdProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam) { switch(mssg) { case WM_KEYDOWN: if(wParam == VK_RETURN) { // TRAITEMENT SPECIAL idxBr = idxBr ? 0: 1; // change couleur du STATIC GetWindowText(hwnd, szbuff, 24); SetWindowText(hst, szbuff); // PASSE DANS LE STATIC SetWindowText(hwnd, 0); // VIDANGE return 0; // ON NE LAISSE PAS SUIVRE } break; // PROCEDURE PAR DEFAUT case WM_DESTROY: DeleteObject(hbrEdit[0]); // NETTOYAGE DeleteObject(hbrEdit[1]); // ET MESSAGE CONTINUE SON CHEMIN } return CallWindowProc(oldProc, hwnd, mssg, wParam, lParam); } void __stdcall AdaptChilds(HWND hwnd) { RECT rc; GetClientRect(hwnd, &rc); MoveWindow(hed, 0, 0, rc.right, 22, 1); MoveWindow(hst, 0, 22, rc.right, rc.bottom - 22, 1); SendMessage(hed, EM_SETLIMITTEXT, 23, 0); } LRESULT CALLBACK AppWndProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam) { switch(mssg) { case WM_CREATE: hed = CreateWindow(szedclass, 0, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_CENTER | ES_AUTOHSCROLL | WS_BORDER, 0, 0, 0, 0, hwnd, (HMENU)1000, hinst, 0); hst = CreateWindowEx(0, szstclass, 0, WS_CHILD | WS_VISIBLE | SS_CENTER | SS_CENTERIMAGE, 0, 0, 0, 0, hwnd, (HMENU)1001, hinst, 0); hbrEdit[0] = CreateSolidBrush(RGB(255,230,230)); hbrEdit[1] = CreateSolidBrush(RGB(230,255,230)); AdaptChilds(hwnd); // ICI SOUS CLASSEMENT DU EDIT oldProc = (WNDPROC) SetWindowLong(hed, GWL_WNDPROC, (long) EdProc); return 0; case WM_SETFOCUS: SetFocus(hed); return 0; case WM_CTLCOLORSTATIC: if(GetWindowLong((HWND)lParam, GWL_ID) == 1001) { SetBkMode((HDC) wParam, TRANSPARENT); return (LRESULT) hbrEdit[idxBr]; } return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, mssg, wParam, lParam); } DWORD InitInstance() { WNDCLASSEX wndcls; memset(&wndcls, 0, sizeof(WNDCLASSEX)); wndcls.cbSize = sizeof(WNDCLASSEX); wndcls.lpfnWndProc = AppWndProc; wndcls.style = CS_HREDRAW | CS_VREDRAW; wndcls.hInstance = hinst; wndcls.lpszClassName = szappname; wndcls.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH); // WHITE_BRUSH wndcls.hCursor = LoadCursor(0, IDC_ARROW); if(!RegisterClassEx(&wndcls)) return 0; hmain = CreateWindowEx(0, szappname, szappname, WS_OVERLAPPED | WS_VISIBLE | WS_SYSMENU, 100, 100, 400, 150, 0, 0, hinst, 0); return (hmain != 0); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int) { MSG msg; hinst = hInstance; if(!InitInstance()) return 0; ShowWindow(hmain, SW_NORMAL); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; }
12 juin 2005 à 09:32
12 juin 2005 à 02:34
Merci
6 juin 2005 à 16:04
26 juin 2003 à 20:17
26 juin 2003 à 20:14
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.