#include "main.h" #include "windows.h" //#include "Psapi.h" #include "shlwapi.h" //#define MAX_VALUE_LEN 16384 //#define MAX_PATH_SIZE 260 //#define MAX_COUNT 1000 //MSG Msg;//Структура Msg типа MSG для получения сообщений Windows //------------------------------------------------------------------------------------- /*Главная функция WinMaln*/ HINSTANCE hInstance; const int iHeightEdit=20; TCHAR szFileName[260]; OPENFILENAME ofn; //BOOL flag; HWND hWndMain; HWND hButExit,hButClear; HWND hListBox,hListBoxErr; HWND hButOpen,hButCreateMap; HWND hEditData; TCHAR lpProcName[256]=TEXT(""); wchar_t pszStrPID[256],szBufErr[256]; //HANDLE hFile; HANDLE s_hFileMap = NULL; PVOID pView; int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpCmd, int nShow) { //------------------------------------------------------------------------------------- hInstance=hInst; WNDCLASSEX wc;//Структура we типа WNDCLASS для задания характеристик окна static LPCTSTR szClassName = TEXT("MainLab5Window");//Произвольное имя класса главного окна static LPCTSTR szTitle = TEXT("Лабораторная работа №6 - Межпроцессное и межпоточное взаимодействие");//заголовок окна /*Зарегистрируем класс главного окна*/ ZeroMemory(&wc,sizeof(wc));//Обнуление всех членов структуры wс wc.cbSize = sizeof(wc); // Set structure size wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc=WndProc; // Определяем оконную процедуру для главного окна wc.hInstance=hInst;//Дескриптор приложения wc.hIcon = LoadIcon(0, IDI_APPLICATION);//Стандартная пиктограмма wc.hCursor=LoadCursor(NULL,IDC_ARROW);//Стандартный курсор мыши char ID_MAINMENU[10] = "menu? o_0"; wc.hbrBackground=CreateSolidBrush(GetSysColor(COLOR_BTNFACE));// системный цвет рабочий области окна wc.lpszMenuName=(LPCWSTR)ID_MAINMENU; wc.lpszClassName=szClassName;//Имя класса окна RegisterClassEx(&wc);//Вызов функции Windows регистрации класса окна //Создадим главное окно по центру экрана и сделаем его видимым hWndMain=CreateWindow(szClassName, szTitle, WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX & ~WS_THICKFRAME,0,0,800,735,HWND_DESKTOP,NULL,hInst,NULL);//Родитель, меню, другие параметры RECT rc,rcMain; HWND hwndDesktop = GetDesktopWindow(); GetWindowRect(hwndDesktop, &rc); GetWindowRect(hWndMain, &rcMain); SetWindowPos(hWndMain, HWND_TOP, (rc.right-rc.left-rcMain.right)/2, (rc.bottom-rc.top-rcMain.bottom)/2, 0, 0, SWP_NOSIZE); ShowWindow(hWndMain,SW_SHOWNORMAL);//Вызов функции Windows показа окна /*Организуем цикл обнаружения сообщений*/ while(GetMessage(&Msg,NULL,0,0)) {// Если есть сообщение, передать его нам TranslateMessage(&Msg); DispatchMessage(&Msg);}//и вызвать оконную процедуру WndProc return 0;//После выхода из цикла вернуться в Windows }//Конец функции WinMain LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){ switch(msg){ HANDLE_MSG (hwnd, WM_CREATE, OnCreate); HANDLE_MSG (hwnd, WM_COMMAND, OnCommand); //HANDLE_MSG(hwnd,WM_PAINT,OnPaint); //HANDLE_MSG (hwnd, WM_DESTROY, OnDestroy); //HANDLE_MSG (hwnd, WM_NOTIFY, OnNotify); default: //B случае всех остальных сообщений Windows обработка return(DefWindowProc(hwnd,msg,wParam,lParam)) ; //их по умолчанию }//Конец оператора switch }//Конец функции WndProc bool OnCreate (HWND hwnd, LPCREATESTRUCT){ //------------------------------------------------------------------------------------- TCHAR ButExit[]=TEXT(" Exit "); RECT Rect; GetClientRect(hwnd,&Rect); hButExit=CreateWindow(TEXT("BUTTON"),NULL,WS_CHILD|WS_VISIBLE|SS_CENTER,Rect.right- Rect.left-105,Rect.top+655+iHeightEdit,(int)(1,5*iHeightEdit),iHeightEdit ,hwnd,NULL,hInstance,NULL); SendMessage(hButExit,WM_SETTEXT, 0, (LPARAM)(LPCSTR)ButExit); hButClear=CreateWindow(TEXT("BUTTON"),NULL,WS_CHILD|WS_VISIBLE|SS_CENTER,Rect.right- Rect.left-235,Rect.top+655+iHeightEdit,(int)(1,5*iHeightEdit),iHeightEdit ,hwnd,NULL,hInstance,NULL); SendMessage(hButClear,WM_SETTEXT, 0, (LPARAM)(LPCSTR)TEXT("Clear")); hButOpen=CreateWindow(TEXT("BUTTON"),NULL,WS_CHILD|WS_VISIBLE|SS_CENTER,Rect.right- Rect.left-780,Rect.top+5+iHeightEdit,(int)(6*iHeightEdit),iHeightEdit ,hwnd,NULL,hInstance,NULL); SendMessage(hButOpen,WM_SETTEXT, 0, (LPARAM)(LPCSTR)TEXT("Open")); hButCreateMap=CreateWindow(TEXT("BUTTON"),NULL,WS_CHILD|WS_VISIBLE|SS_CENTER,Rect.right- Rect.left-780,Rect.top+30+iHeightEdit,(int)(6*iHeightEdit),iHeightEdit ,hwnd,NULL,hInstance,NULL); SendMessage(hButCreateMap,WM_SETTEXT, 0, (LPARAM)(LPCSTR)TEXT("Create Mapping Of Data")); hEditData=CreateWindow(TEXT("EDIT"),NULL,WS_CHILD|WS_VISIBLE|SS_LEFT ,(int)(Rect.left+70),(int)(Rect.top+100),(int)(Rect.right- Rect.left-600),20,hwnd,NULL,hInstance,NULL); //HWND hTotalOfBytes=CreateWindow(TEXT("STATIC"),NULL,WS_CHILD|WS_VISIBLE|SS_LEFT ,(int)(Rect.left+15),(int)(Rect.top+345),(int)(Rect.right- Rect.left-670),20,hwnd,NULL,hInstance,NULL); //SendMessage(hTotalOfBytes,WM_SETTEXT, 0, (LPARAM)(LPCSTR)TEXT("TotalOfBytes:")); HWND hAuthor=CreateWindow(TEXT("STATIC"),NULL,WS_CHILD|WS_VISIBLE|SS_LEFT ,(int)(Rect.left+250),(int)(Rect.top+680),(int)(Rect.right- Rect.left-550),20,hwnd,NULL,hInstance,NULL); SendMessage(hAuthor,WM_SETTEXT, 0, (LPARAM)(LPCSTR)TEXT("(c) Косоногова М.А., гр. ИТ-31, 2008")); hListBox= CreateWindow( TEXT("LISTBOX"), NULL, WS_CHILD | /*LBS_STANDARD |*/ WS_VSCROLL | LBS_DISABLENOSCROLL | WS_VISIBLE/* & (~LBS_SORT)*/, 340,30, 455, 250, hwnd, NULL, hInstance, NULL); hListBoxErr= CreateWindow( TEXT("LISTBOX"), NULL, WS_CHILD | /*LBS_STANDARD |*/ WS_VSCROLL | LBS_DISABLENOSCROLL | WS_VISIBLE/* & (~LBS_SORT)*/, 340,315, 455, 270, hwnd, NULL, hInstance, NULL); return TRUE; } void OnCommand (HWND hwnd, int id, HWND hw, UINT){ //------------------------------------------------------------------------------------- if (hw==hButExit) OnClickButExit(); if (hw==hButClear) OnClickButClear(hWndMain); if (hw==hButOpen) OnClickButOpen(hWndMain); if (hw==hButCreateMap) OnClickButCreateMap(hWndMain); } void OnClickButExit() { PostQuitMessage(0); } void OnClickButClear(HWND hwnd) { RECT Rect; GetClientRect(hwnd,&Rect); hListBox= CreateWindow( TEXT("LISTBOX"), NULL, WS_CHILD | /*LBS_STANDARD |*/ WS_VSCROLL | LBS_DISABLENOSCROLL | WS_VISIBLE/* & (~LBS_SORT)*/, 340,30, 455, 250, hwnd, NULL, hInstance, NULL); hListBoxErr= CreateWindow( TEXT("LISTBOX"), NULL, WS_CHILD | /*LBS_STANDARD |*/ WS_VSCROLL | LBS_DISABLENOSCROLL | WS_VISIBLE/* & (~LBS_SORT)*/, 340,315, 455, 270, hwnd, NULL, hInstance, NULL); } void OnClickButOpen(HWND hwnd) { /*LPCWSTR lpFilter=TEXT("Text\0*.TXT\0"); ZeroMemory(&ofn,sizeof(OPENFILENAME)); ofn.lStructSize=sizeof(OPENFILENAME) ; ofn.hwndOwner=hWndMain; ofn.hInstance=NULL; ofn.lpstrFile = szFileName; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof(szFileName); ofn.lpstrFilter = lpFilter; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; if (!GetOpenFileName(&ofn)) { MessageBox(hwnd,TEXT("Error by open file"),TEXT("Error"),MB_ICONERROR); wsprintf(szBufErr,L"Error by open file"); SendMessage(hListBoxErr,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)szBufErr); } else { hFile=CreateFile(szFileName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,NULL,NULL); if (hFile==INVALID_HANDLE_VALUE) { MessageBox(hwnd,TEXT("File isn't opened or created"),TEXT("Error"),MB_ICONERROR); wsprintf(szBufErr,L"File isn't opened"); SendMessage(hListBoxErr,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)szBufErr); } else { wsprintf(szBufErr,L"File was opened successfully"); SendMessage(hListBoxErr,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)szBufErr); } }*/ } void OnClickButCreateMap(HWND hwnd) { s_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4 * 1024, TEXT("MMFSharedData")); if (s_hFileMap != NULL) { if (GetLastError() == ERROR_ALREADY_EXISTS) { wsprintf(szBufErr,L"Mapping already exists - not created."); SendMessage(hListBoxErr,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)szBufErr); CloseHandle(s_hFileMap); } else { // File mapping created successfully. // Map a view of the file into the address space. pView = MapViewOfFile(s_hFileMap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0); if (pView != NULL) { // Put edit text into the MMF. Edit_GetText(hEditData,(PTSTR) pView, 4 * 1024); // Protect the MMF storage by unmapping it. UnmapViewOfFile(pView); // The user can't create another file right now. //Button_Enable(hwndCtl, FALSE); // The user closed the file. //Button_Enable(GetDlgItem(hwnd, IDC_CLOSEFILE), TRUE); } else { wsprintf(szBufErr,L"Can't map view of file."); SendMessage(hListBoxErr,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)szBufErr); } } } else { wsprintf(szBufErr,L"Can't create file mapping."); SendMessage(hListBoxErr,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)szBufErr); } }