/*===============================================================*/ /* */ /* LEAD API MDI Region Demo */ /* */ /* Copyright (C) 2001 by LEAD Technologies, Inc. */ /* */ /* All Rights Reserved */ /* */ /*===============================================================*/ #include #include #include "RgnDem.h" L_TCHAR szFrameClass[] = TEXT("RgnFrame"); L_TCHAR szChildClass[] = TEXT("RgnImage"); L_TCHAR szAppName[] = TEXT ("RgnDemo"); HMENU hMenuInitWindow, hMenuChildWindow; HMENU hMenuInit, hMenuChild; HWND hWndFrame, hWndClient; HINSTANCE hInst; L_INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HACCEL hAccel ; MSG msg; WNDCLASS wndclass; hInst = hInstance; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = FrameWndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra =0; wndclass.hInstance =hInstance; wndclass.hIcon =LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)); wndclass.hCursor =LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=GetStockObject (GRAY_BRUSH); wndclass.lpszMenuName =NULL; wndclass.lpszClassName=szFrameClass; if(!RegisterClass (&wndclass)) return 0; //register the Image child window class wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = ChildWndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra =sizeof(HANDLE); wndclass.hInstance =hInstance; wndclass.hIcon =LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON)); wndclass.hCursor =LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=GetStockObject (GRAY_BRUSH); wndclass.lpszMenuName =NULL; wndclass.lpszClassName=szChildClass; RegisterClass(&wndclass); hMenuInit = LoadMenu (hInstance, MAKEINTRESOURCE(IDR_MAINFRAME)); hMenuChild = LoadMenu (hInstance, MAKEINTRESOURCE(IDR_CHILDFRAME)); hMenuInitWindow = GetSubMenu(hMenuInit, INIT_MENU_POS); hMenuChildWindow = GetSubMenu(hMenuChild, CHILD_MENU_POS); //Create the frame window hAccel = LoadAccelerators(hInstance,szAppName); hWndFrame = CreateWindow(szFrameClass, TEXT("IMAGE DEMO"), WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hMenuInit, hInstance, NULL); hWndClient = GetWindow(hWndFrame,GW_CHILD); ShowWindow(hWndFrame, iCmdShow); UpdateWindow(hWndFrame); L_DlgInit(DLG_INIT_COLOR); while (GetMessage (&msg,NULL,0,0)) { if (!IsWindow(hStatusDlg) || !IsDialogMessage(hStatusDlg,&msg)) if(!TranslateMDISysAccel(hWndClient,&msg) && !TranslateAccelerator (hWndFrame,hAccel,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } L_DlgFree(); DestroyMenu(hMenuChild); return msg.wParam; } L_BOOL CALLBACK CloseEnumProc (HWND hwnd, LPARAM lParam) { if (GetWindow (hwnd, GW_OWNER)) // Check for icon title return TRUE; SendMessage (GetParent (hwnd), WM_MDIRESTORE, (WPARAM) hwnd, 0); if (!SendMessage (hwnd, WM_QUERYENDSESSION, 0, 0)) return TRUE; SendMessage (GetParent (hwnd), WM_MDIDESTROY, (WPARAM) hwnd, 0); return TRUE; } L_INT DoDialogBoxParam (L_INT nDialog, HWND hWnd, DLGPROC pfnDialog, LPARAM lParam) { L_INT nRet; DLGPROC pfn; pfn = (DLGPROC) MakeProcInstance((FARPROC) pfnDialog, hInst); nRet = DialogBoxParam(hInst, MAKEINTRESOURCE(nDialog), hWnd, pfn, lParam); FreeProcInstance((FARPROC) pfn); return nRet; } L_BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: return TRUE; case WM_CLOSE: EndDialog (hDlg, 0); return TRUE; case WM_COMMAND: switch(LOWORD (wParam)) { case IDOK: EndDialog(hDlg , 0); return TRUE; } break ; } return FALSE ; } L_VOID DoStatusDlg(L_INT nDialog, HWND hWnd, DLGPROC pfnDialog) { DLGPROC pfn; pfn = (DLGPROC) MakeProcInstance((FARPROC) pfnDialog, hInst); hStatusDlg = CreateDialog(hInst, MAKEINTRESOURCE(nDialog), hWnd, pfn); ShowWindow(hStatusDlg, SW_SHOW); } L_VOID ShowStatus(L_INT nId, L_INT x, L_INT y) { L_INT nIdMessage = 500; LPARAM lParam; if(nId == 0) return; lParam = (LPARAM) MAKELPARAM(x, y); SendMessage(hStatusDlg,nIdMessage+nId , 0, lParam); } L_BOOL CALLBACK StatusDlgProc(HWND hDlg,UINT message, WPARAM wParam,LPARAM lParam) { static L_INT nPos; L_TCHAR szBuffer[100]; HWND hListBox; memset(szBuffer, 0, 100); hListBox = GetDlgItem(hDlg,IDC_LIST); switch (message) { case WM_INITDIALOG: nPos = 0; return TRUE; case ID_LBDOWN: wsprintf(szBuffer,TEXT("The mouse left button is down and its position : (%d , %d)"), LOWORD(lParam) ,HIWORD(lParam)); break; case ID_LBUP: wsprintf(szBuffer,TEXT("The mouse left button is UP at : (%d , %d)"), LOWORD(lParam) ,HIWORD(lParam)); break; case ID_MMOUSE: wsprintf(szBuffer,TEXT("The mouse move to point : (%d , %d)"), LOWORD(lParam) ,HIWORD(lParam)); break; case ID_SFLOATER: wsprintf(szBuffer,TEXT("Start Moving The Floater .")); break; case ID_MFLOATER: wsprintf(szBuffer,TEXT("The Floater Move.")); break; case ID_RFLOATER: wsprintf(szBuffer,TEXT("Stop Moving The Floater .")); break; case ID_CREGION: wsprintf(szBuffer,TEXT("Start Create a Region, Start Point at:(%d , %d)"), LOWORD(lParam) ,HIWORD(lParam)); break; case ID_OCREGION: wsprintf(szBuffer,TEXT("Region on Creation end Point reach to : (%d , %d)"), LOWORD(lParam) ,HIWORD(lParam)); break; case ID_RCREATE: wsprintf(szBuffer,TEXT("The Region created end point at: (%d , %d)"), LOWORD(lParam) ,HIWORD(lParam)); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: nStat =0; EndDialog (hDlg, IDOK); hStatusDlg = NULL; return TRUE; case IDC_CLEAR: ListBox_ResetContent(hListBox); nPos = 0; return TRUE; } return 0; case WM_CLOSE: nStat =0; DestroyWindow(hDlg); hStatusDlg = NULL; return 0; } if (lstrlen(szBuffer) > 0) { ListBox_AddString(hListBox, szBuffer); ListBox_SetCurSel(hListBox,nPos++); } return 0; }