Facebook
From jerzyk, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 204
  1. // Okno.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "lab4.h"
  6. #include "Okno.h"
  7.  
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #endif
  11. #define OPER_SIZE 4096
  12.  
  13. HANDLE mail;
  14. HANDLE hSkrzynka;
  15.  
  16. static UINT NEAR WM_LAB4 = RegisterWindowMessage("WM_SYSTOPER_LAB4");
  17.  
  18. // CAboutDlg dialog used  for App About
  19.  
  20. class CAboutDlg : public CDialog
  21. {
  22. public:
  23.     CAboutDlg();
  24.  
  25. // Dialog Data
  26.     enum { IDD = IDD_ABOUTBOX };
  27.  
  28.     protected:
  29.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  30.  
  31. // Implementation
  32. protected:
  33.     DECLARE_MESSAGE_MAP()
  34. };
  35.  
  36. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  37. {
  38. }
  39.  
  40. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42.     CDialog::DoDataExchange(pDX);
  43. }
  44.  
  45. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  46. END_MESSAGE_MAP()
  47.  
  48.  
  49. // COkno dialog
  50.  
  51.  
  52.  
  53. COkno::COkno(CWnd* pParent /*=NULL*/)
  54.     : CDialog(COkno::IDD, pParent)
  55. {
  56.     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  57. }
  58.  
  59. void COkno::DoDataExchange(CDataExchange* pDX)
  60. {
  61.     CDialog::DoDataExchange(pDX);
  62.     DDX_Control(pDX, IDC_EKRAN, m_ekran);
  63.     DDX_Control(pDX, IDC_LISTA, m_lista);
  64.     DDX_Control(pDX, IDC_ODSWIEZ, m_odswiez);
  65. }
  66.  
  67. BEGIN_MESSAGE_MAP(COkno, CDialog)
  68.     ON_WM_SYSCOMMAND()
  69.     ON_WM_PAINT()
  70.     ON_WM_QUERYDRAGICON()
  71.     //}}AFX_MSG_MAP
  72.     ON_WM_TIMER()
  73.     ON_REGISTERED_MESSAGE(WM_LAB4,OnWiadomosc)
  74.     ON_BN_CLICKED(IDC_ODSWIEZ, OnBnClickedOdswiez)
  75.     ON_BN_CLICKED(IDC_WYSLIJ, OnBnClickedWyslij)
  76.     ON_BN_CLICKED(IDC_ZALICZAMY, OnBnClickedZaliczamy)
  77.     ON_WM_DESTROY()
  78.     ON_BN_CLICKED(IDC_KONIEC, OnBnClickedKoniec)
  79. END_MESSAGE_MAP()
  80.  
  81.  
  82. // COkno message handlers
  83.  
  84. BOOL COkno::OnInitDialog()
  85. {
  86.     CDialog::OnInitDialog();
  87.  
  88.     // Add "About..." menu item to system menu.
  89.  
  90.     // IDM_ABOUTBOX must be in the system command range.
  91.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  92.     ASSERT(IDM_ABOUTBOX < 0xF000);
  93.  
  94.     CMenu* pSysMenu = GetSystemMenu(FALSE);
  95.     if (pSysMenu != NULL)
  96.     {
  97.         CString strAboutMenu;
  98.         strAboutMenu.LoadString(IDS_ABOUTBOX);
  99.         if (!strAboutMenu.IsEmpty())
  100.         {
  101.             pSysMenu->AppendMenu(MF_SEPARATOR);
  102.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  103.         }
  104.     }
  105.  
  106.     // Set the icon for this dialog.  The framework does this automatically
  107.     //  when the application's main window is not a dialog
  108.     SetIcon(m_hIcon, TRUE);         // Set big icon
  109.     SetIcon(m_hIcon, FALSE);        // Set small icon
  110.  
  111.     // Add extra initialization here
  112.  
  113.     srand((unsigned)time(0));
  114.     SetTimer(1,500,0);
  115.  
  116.     hSkrzynka=CreateMailslot("\\.\mailslot\naimad_skrzynka",1024,0,NULL);
  117.  
  118.     if(hSkrzynka==INVALID_HANDLE_VALUE)
  119.     {
  120.         MessageBox("Skrzynka nie zostala utworzona");
  121.                 hSkrzynka=CreateMailslot("\\.\mailslot\naimad_cokolwiek",1024,0,NULL);
  122.       //  exit(1);
  123.     }
  124.     char * zadanie = (char*) malloc(OPER_SIZE);
  125.         char * zadanie1 = (char*) malloc(OPER_SIZE);
  126.     char * odpowiedz = (char*) malloc(OPER_SIZE);
  127.     memset(odpowiedz, 0, OPER_SIZE);
  128.  
  129.     strcpy(zadanie, "PUT\\.\mailslot\naimad_skrzynka");
  130.     strcpy(zadanie1, "PUT\\.\mailslot\naimad_cokolwiek");
  131.  
  132.     DWORD odp_size;
  133.     if(CallNamedPipe("\\.\pipe\sysopnp", zadanie, strlen(zadanie)+1, odpowiedz, OPER_SIZE, &odp_size, 3000))
  134.     {
  135.         MessageBox("Transakcja powiodla sie", "Potok", 48);
  136.     }
  137.     else
  138.     {
  139.         sprintf(zadanie, "blad transakcji 0x%X", GetLastError());
  140.         MessageBox(zadanie, "Potok",16);
  141.     }
  142.         if(CallNamedPipe("\\.\pipe\sysopnp", zadanie1, strlen(zadanie1)+1, odpowiedz, OPER_SIZE, &odp_size, 3000))
  143.     {
  144.         MessageBox("Transakcja powiodla sie", "Potok", 48);
  145.     }
  146.     else
  147.     {
  148.         sprintf(zadanie1, "blad transakcji 0x%X", GetLastError());
  149.         MessageBox(zadanie1, "Potok",16);
  150.     }
  151.     free(zadanie);
  152.     free(odpowiedz);
  153.         free(zadanie1);
  154.    
  155.     return TRUE;  // return TRUE  unless you set the focus to a control
  156. }
  157.  
  158. void COkno::OnSysCommand(UINT nID, LPARAM lParam)
  159. {
  160.     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  161.     {
  162.         CAboutDlg dlgAbout;
  163.         dlgAbout.DoModal();
  164.     }
  165.     else
  166.     {
  167.         CDialog::OnSysCommand(nID, lParam);
  168.     }
  169. }
  170.  
  171. // If you add a minimize button to your dialog, you will need the code below
  172. //  to draw the icon.  For MFC applications using the document/view model,
  173. //  this is automatically done for you by the framework.
  174.  
  175. void COkno::OnPaint()
  176. {
  177.     if (IsIconic())
  178.     {
  179.         CPaintDC dc(this); // device context for painting
  180.  
  181.         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  182.  
  183.         // Center icon in client rectangle
  184.         int cxIcon = GetSystemMetrics(SM_CXICON);
  185.         int cyIcon = GetSystemMetrics(SM_CYICON);
  186.         CRect rect;
  187.         GetClientRect(&rect);
  188.         int x = (rect.Width() - cxIcon + 1) / 2;
  189.         int y = (rect.Height() - cyIcon + 1) / 2;
  190.  
  191.         // Draw the icon
  192.         dc.DrawIcon(x, y, m_hIcon);
  193.     }
  194.     else
  195.     {
  196.         CDialog::OnPaint();
  197.     }
  198. }
  199.  
  200. // The system calls this function to obtain the cursor to display while the user drags
  201. //  the minimized window.
  202. HCURSOR COkno::OnQueryDragIcon()
  203. {
  204.     return static_cast<HCURSOR>(m_hIcon);
  205. }
  206.  
  207. void COkno::OnTimer(UINT nIDEvent)
  208. {
  209.     //TODO: Sprawdzenie czy jest nowa wiadomosc w skrzynce
  210.     DWORD nWiad;
  211.     if(GetMailslotInfo(hSkrzynka, NULL, NULL, &nWiad, NULL)&&(nWiad>0))
  212.     {
  213.         CString p;
  214.             CFile f(hSkrzynka);
  215.         char * blk = (char *)malloc(1024);
  216.         f.Read(blk, 1024);
  217.         m_ekran.GetWindowText(p);
  218.         p.AppendFormat("%srn",blk);
  219.         m_ekran.SetWindowText(p);
  220.         free(blk);
  221.     }
  222.     CDialog::OnTimer(nIDEvent);
  223. }
  224.  
  225. void COkno::OnBnClickedOdswiez()
  226. {
  227.     char buffer[1024]="";
  228.     /*TODO: Pobranie listy zarejestrowanych skrzynek*/
  229.     char * zadanie = (char*) malloc(OPER_SIZE);
  230.     char * odpowiedz = (char*) malloc(OPER_SIZE);
  231.     memset(odpowiedz, 0, OPER_SIZE);
  232.     strcpy(zadanie, "GET");
  233.     DWORD odp_size;
  234.     if(CallNamedPipe("\\.\pipe\sysopnp", zadanie, strlen(zadanie)+1, odpowiedz, OPER_SIZE, &odp_size, 3000))
  235.     {
  236.         char *p=odpowiedz;
  237.         while(*p){if(*p =='n') *p='�'; p++;}
  238.         p=odpowiedz;
  239.         int l;  m_lista.ResetContent();
  240.         while(l=strlen(p))
  241.         {m_lista.AddString(p);
  242.             p+=l+1;
  243.         }
  244.     }
  245.     else
  246.     {
  247.         sprintf(zadanie, "blad transakcji 0x%X", GetLastError());
  248.         MessageBox(zadanie, "Potok",16);
  249.     }
  250.     free(zadanie);
  251.     free(odpowiedz);
  252. }
  253.  
  254. void COkno::OnBnClickedWyslij()
  255. {
  256.     char buffer[128];
  257.     m_lista.GetWindowText(buffer,128);
  258.     //TODO: Wyslanie wiadomosci do wybranej skrzynki
  259.     CString pn;
  260.     m_lista.GetWindowText(pn);
  261.     CFile hPlik(pn, CFile::modeWrite | CFile::shareDenyNone);
  262.     char * do_wyslania=(char*)malloc(512);
  263.     CString a;
  264.     m_ekran.GetWindowText(a);
  265.    
  266.     strcpy(do_wyslania, "student: " + a);
  267.     hPlik.Write("", 1);
  268.     hPlik.Write(do_wyslania, strlen(do_wyslania)+1);
  269.  
  270.     //hPlik.Write(a, strlen(a)+1);
  271.     hPlik.Close();
  272.     free(do_wyslania);
  273. }
  274.  
  275. afx_msg LRESULT COkno::OnWiadomosc(WPARAM n, LPARAM m)
  276. {
  277.     //TODO: Odbior przeslanego kodu
  278.  
  279.     return 0;
  280. }
  281.  
  282. void COkno::OnBnClickedZaliczamy()
  283. {
  284.     /*TODO: Utworzenie zdarzenia "koniec ćwiczenia" i ustawienie jego stanu na dostepny*/
  285.        
  286. }
  287.  
  288. void COkno::OnDestroy()
  289. {
  290.     KillTimer(1);
  291.     CDialog::OnDestroy();
  292. }
  293.  
  294. void COkno::OnBnClickedKoniec()
  295. {
  296. EndDialog(1);
  297. }