Реферат

Реферат Оконные интерфейсы Windows Station and Desktops

Работа добавлена на сайт bukvasha.net: 2015-10-28

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 28.1.2025





Министерство образования и науки Республики Беларусь

Белорусский государственный университет

информатики и радиоэлектроники
Факультет информационных технологий и управления

Кафедра информационных технологий автоматизированных систем
РАСЧЕТНО–ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к типовому расчёту

по курсу “Системное программирование”

на тему


Оконные

интерфейсы
(Windows Station and Desktops)”

Выполнила студентка гр.620604                _________ Мисюль Е.Н.

(подпись)
Руководитель                                             _________ Тиханович Т.В.

(подпись)
Минск 2009


СОДЕРЖАНИЕ
ВВЕДЕНИЕ. 3

1         ПОСТАНОВКА ЗАДАЧИ.. 4

2         ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ.. 5

2.1          Создание рабочего стола. 5

2.2          Переключение между рабочими столами. 6

2.3          Удаление рабочего стола. 8

3         РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ.. 9

3.1          Общие сведения. 9

3.2          Запуск/выход из программы.. 9

3.3          Создание рабочего стола. 10

3.4          Переключение между рабочими столами. 10

3.5          Запуск программ. 11

ЗАКЛЮЧЕНИЕ. 13

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ. 14

Листинг программы.. 15




ВВЕДЕНИЕ
В операционной системе Linux в отличие от Windows во всех графических оболочках (Gnome, KDE и пр.) встроены сразу четыре рабочих стола, между которыми можно быстро переключаться, и на каждом рабочем столе можно открывать отдельные окна. Это позволяет не загромождать один рабочий стол множеством окон и открытых папок и повышает производительность, как человека, так и компьютера.

Конечно, если вам не требуется открывать много окон, да к тому же монитор достаточно большой (не 15-дюймовый экран ноутбука, а 19" ЖК-монитор), то виртуальные столы могут быть без надобности.

Однако только представьте, как удобно, например, на первом рабочем столе можно разместить все необходимые окна непосредственно для работы, на втором рабочем столе открыть окна только для отдыха и развлечений, на третьем рабочем столе – все для общения (почтовый клиент, ICQ, IRC, Skype и пр.), четвертый стол можно оставить чистым, чтобы при необходимости можно было открыть нужную папку или программу не загромождая излишне другие рабочие столы.

Если вы большой начальник или, наоборот, нерадивый сотрудник, то с помощью виртуальных столов возможно на одном рабочем столе играть в шарики и/или раскладывать пасьянс, а если кто-то подойдет к вашему компьютеру, то можно быстро переключиться на другой виртуальный рабочий стол, где открыт только рабочий документ в Word'e и/или другие программы необходимые для вашей работы. При этом на панеле задач текущего рабочего стола не будет видно открытых окон других рабочих столов.
 

1             ПОСТАНОВКА ЗАДАЧИ




Целью данной работы является изучение системного программирования в среде Win32 API и написание программы.

Разработать программу, которая создает несколько рабочих столов и предоставляет возможность переключаться между ними.

2             ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

2.1     Создание рабочего стола


Существует множество программ, создающих виртуальные рабочие столы и работающие как в Windows NT, так и в Win9x. Такие программы прибегают к различным ухищрениям, например, скрывают окна программ,находящихся на "другом рабочем столе". Но в Windows NT существует стандартный способ создания рабочих столов, который мы и рассмотрим.

Создадим рабочий стол "NewDesktop".

THandle hDesktop: ; (или HDESK)

{...}

hDesktop=CreateDesktop('NewDesktop',null,null,DF_ALLOWOTHERACCOUNTHOOK,

DESKTOP_CREATEMENU + DESKTOP_CREATEWINDOW + DESKTOP_ENUMERATE + DESKTOP_HOOKCONTROL +

DESKTOP_READOBJECTS + DESKTOP_SWITCHDESKTOP + DESKTOP_WRITEOBJECTS,null);

if hDesktop<>0 then Рабочий стол создан else ошибка;

Далее на созданном столе надо запустить оболочку (shell). По умолчанию оболочкой у нас будет являться explorer.exe. Его мы и запустим.

var

_PROCESS_INFORMATION ;

_STARTUPINFOA si;

{...}

Запуск программы с помощью CreateProcess.

FillMemory( @si, sizeof( si ), 0 );

si.cb = sizeof( si );

si.dwFlags = STARTF_USESHOWWINDOW;

si.wShowWindow = SW_SHOWMAXIMIZED;

Но запускаем программу не на обычном рабочем столе, а на вновь созданом

Si.lpDesktop = PChar('Winsta0\NewDesktop');

CreateProcess(null,'explorer.exe',null,null,false,NORMAL_PRIORITY_CLASS,null,null,Si,pi);

Вообще-то вместо explorer.exe лучше запускать userinit.exe. Эта программа запускает оболочку.


2.2    Переключение между рабочими столами


Теперь у нас на новом рабочем столе запущен shell и можно переключаться на новый рабочий стол (на него можно переключаться и без запуска программы, но смотреть там нечего). Переключение производится функцией SwitchDesktop.

if SwitchDesktop(hDesktop) then переключились на новый рабочий стол else ошибка;

но переключиться обратно мы не сможем, если не запустим на этом столе другую программу , которая бы переключила нас на "родной" десктоп. Но об этом позже, а пока сделаем так:

Sleep(10000);

HDesk hOldDesktop;

И через 10 секунд переключимся назад. Для этого нам нужен дескриптор "Winsta0\Default". Но где его взять? А получить его можно 2 способами: 1) Т.к. наш потом был запущен на "родном"("Winsta0\Default") столе, то можно вызвать функцию GetThreadDesktop:

hOldDesktop = GetThreadDesktop(GetCurrentThreadId);
Нам известно название первоначального рабочего стола - "Default". Выполняем OpenDesktop:

hOldDesktop = OpenDesktop('Default', DF_ALLOWOTHERACCOUNTHOOK, false,

DESKTOP_CREATEMENU, DESKTOP_CREATEWINDOW, DESKTOP_ENUMERATE, DESKTOP_HOOKCONTROL,

DESKTOP_JOURNALPLAYBACK, DESKTOP_JOURNALRECORD, DESKTOP_READOBJECTS,

DESKTOP_SWITCHDESKTOP, DESKTOP_WRITEOBJECTS);

if hOldDesktop<>0 then Все отлично else Ошибка;

Перед переключением выведем, например, сообщение об этом. Просто MessageBox выведет сообщение на старый рабочий стол и мы его не увидим :(. Поэтому сделаем так: Переключим вывод на новый рабочий стол:

SetThreadDesktop(hDesktop);

Для удачного выполнения этой функции у нашего потока не должно быть открыто никаких окон. Если окна есть, то или закрываем их или создаем новый поток. Функция выполнилась удачно. Теперь посылаем сообщние

MessageBox(0,'Переключение рабочего стола','Hello',mb_ok);

Окошко должно вывестись на видимом рабочем столе! Т.к. окно не модальное, то дадим пользователю еще 10 секунд и после этого переключим его на старый рабочий стол.

Sleep(10000);

За это время желательно, чтобы пользователь нажал на OK в сообщении.

SetThreadDesktop(hOldDesktop);

SwitchDesktop(hOldDesktop);


2.3    Удаление рабочего стола


Теперь завершаем explorer на NewDesktop и закрываем этот рабочий стол.

TerminateProcess(pi.hProcess,1);

CloseHandle(pi.hThread);

CloseHandle(pi.hProcess);

if CloseDesktop(hDesktop) then закрыли рабочий стол else ошибка;

Ну и наверное стоит удалить дескриптор hOldDesktop

CloseHandle(hOldDesktop);

3             РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

3.1     Общие сведения


Написанная нами программа создает несколько рабочих столов и предоставляет возможность переключаться между ними.

3.2     Запуск/выход из программы


Нужно запустить файл Desktops.exe. Вид окна программы изображён на рисунке 3.1.    

Рисунок 3.1 – Окно программы
Для выхода из программы нажать кнопку «Exit».





3.3     Создание рабочего стола


Для создания рабочего стола необходимо в поле «New desktop» ввести имя нового рабочего стола и нажать кнопку «Create». Новый рабочий стол появится в списке.   

3.4     Переключение между рабочими столами


Переключаться между рабочими столами нужно с помощью кнопки «Switch», предварительно выбрав рабочий стол из списка. При нажатии кнопки «Switch», отобразится новый рабочий стол.

На рисунках 3.2 и 3.3 представлены два рабочих стола: стандартный Default (рисунок 3.2) и нами созданный My Desktop (рисунок 3.3).


Рисунок 3.2 – Рабочий стол Default
Рисунок 3.3 – Рабочий стол My Desktop
Для обновления списка рабочих столов необходимо нажать кнопку «Refresh».

3.5    Запуск программ


Вновь созданный рабочий стол имеет вид, представленный на рисунке3.4.

Как видно из рисунка, на новом рабочем столе нет никаких инструментов для работы. Для работы необходимо запустить какой-либо файловый менеджер или стандартный проводник Windows (C:\windows\explore.exe). Также можно запустить любую другую программу. Для этого необходимо нажать кнопку «Execute» и в стандартном диалоге открытия файлов выбрать необходимую программу или файл (рисунок 3.5).
Рисунок 3.4 – Вновь созданный рабочий стол


Рисунок 3.5 – Стандартный диалог открытия файлов

ЗАКЛЮЧЕНИЕ
В данном типовом расчёте были рассмотрены основные принципы работы с виртуальными рабочими столами в Windows.

Была разработана программа, которая создает несколько рабочих столов и предоставляет возможность переключаться между ними, запускать на выполнение программы.




СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1.                       Основы  алгоритмизации  и  программирования:  Конспект  лекций для студ. всех спец. и форм обуч. БГУИР / В.Л.Бусько, А.Г.Корбит, Т.М.Кривоносова. – Мн.: БГУИР, 2004. – 103 с.: ил. ISBN 985–444–703–0.

2.                       Microsoft Developer Network (MSDN) – January 2004.




ПРИЛОЖЕНИЕ

(обязательное)

Листинг программы
#include "stdafx.h"

#include "Desktops.h"

#include "DesktopsDlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

BOOL CALLBACK EnumDesktopProc(LPTSTR, LPARAM);

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

                CAboutDlg();

// Dialog Data

                //{{AFX_DATA(CAboutDlg)

                enum { IDD = IDD_ABOUTBOX };

                //}}AFX_DATA

                // ClassWizard generated virtual function overrides

                //{{AFX_VIRTUAL(CAboutDlg)

                protected:

                virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

                //}}AFX_VIRTUAL

// Implementation

protected:

                //{{AFX_MSG(CAboutDlg)

                //}}AFX_MSG

                DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

                //{{AFX_DATA_INIT(CAboutDlg)

                //}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

                CDialog::DoDataExchange(pDX);

                //{{AFX_DATA_MAP(CAboutDlg)

                //}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

                //{{AFX_MSG_MAP(CAboutDlg)

                               // No message handlers

                //}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CDesktopsDlg dialog

CDesktopsDlg::CDesktopsDlg(CWnd* pParent /*=NULL*/)

                : CDialog(CDesktopsDlg::IDD, pParent)

{

                //{{AFX_DATA_INIT(CDesktopsDlg)

                               // NOTE: the ClassWizard will add member initialization here

                //}}AFX_DATA_INIT

                m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CDesktopsDlg::DoDataExchange(CDataExchange* pDX)

{

                CDialog::DoDataExchange(pDX);

                //{{AFX_DATA_MAP(CDesktopsDlg)

                               // NOTE: the ClassWizard will add DDX and DDV calls here

                //}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CDesktopsDlg, CDialog)

                //{{AFX_MSG_MAP(CDesktopsDlg)

                ON_WM_SYSCOMMAND()

                ON_WM_PAINT()

                ON_WM_QUERYDRAGICON()

                ON_BN_CLICKED(IDC_CREATE_DESKTOP, OnCreateDesktop)

                ON_BN_CLICKED(IDC_CLOSE_DESKTOP, OnCloseDesktop)

                ON_BN_CLICKED(IDC_SWITCH_TO_DESKTOP, OnSwitchToDesktop)

                ON_BN_CLICKED(IDC_REFRESH_DESKTOP, OnRefreshDesktop)

                ON_BN_CLICKED(IDC_EXECUTE, OnExecute)

                //}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CDesktopsDlg message handlers

BOOL CDesktopsDlg::OnInitDialog()

{

                CDialog::OnInitDialog();

                // Add "About..." menu item to system menu.

                // IDM_ABOUTBOX must be in the system command range.

                ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

                ASSERT(IDM_ABOUTBOX < 0xF000);

                CMenu* pSysMenu = GetSystemMenu(FALSE);

                if (pSysMenu != NULL)

                {

                               CString strAboutMenu;

                               strAboutMenu.LoadString(IDS_ABOUTBOX);

                               if (!strAboutMenu.IsEmpty())

                               {

                                               pSysMenu->AppendMenu(MF_SEPARATOR);

                                               pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

                               }

                }

                SetIcon(m_hIcon, TRUE);                                // Set big icon

                SetIcon(m_hIcon, FALSE);                              // Set small icon

               

                // TODO: Add extra initialization here

    OnRefreshDesktop();

               

                return TRUE;  // return TRUE  unless you set the focus to a control

}

void CDesktopsDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

                if ((nID & 0xFFF0) == IDM_ABOUTBOX)

                {

                               CAboutDlg dlgAbout;

                               dlgAbout.DoModal();

                }

                else

                {

                               CDialog::OnSysCommand(nID, lParam);

                }

}

// If you add a minimize button to your dialog, you will need the code below

//  to draw the icon.  For MFC applications using the document/view model,

//  this is automatically done for you by the framework.

void CDesktopsDlg::OnPaint()

{

                if (IsIconic())

                {

                               CPaintDC dc(this); // device context for painting

                               SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

                               // Center icon in client rectangle

                               int cxIcon = GetSystemMetrics(SM_CXICON);

                               int cyIcon = GetSystemMetrics(SM_CYICON);

                               CRect rect;

                               GetClientRect(&rect);

                               int x = (rect.Width() - cxIcon + 1) / 2;

                               int y = (rect.Height() - cyIcon + 1) / 2;

                               // Draw the icon

                               dc.DrawIcon(x, y, m_hIcon);

                }

                else

                {

                               CDialog::OnPaint();

                }

}

HCURSOR CDesktopsDlg::OnQueryDragIcon()

{

                return (HCURSOR) m_hIcon;

}

void CDesktopsDlg::OnCreateDesktop()

{

    HDESK hndDesk;

                STARTUPINFO si;

                PROCESS_INFORMATION pi;

    DWORD i, dwCount = SendDlgItemMessage(IDC_DESKTOP_LIST, LB_GETCOUNT);

    char *szNew;

    CString strTmp, strNewDesktop;

    OnRefreshDesktop();

    SendDlgItemMessage(IDC_NEW_DESKTOP, EM_GETLINE, 0L, (LPARAM)strNewDesktop.GetBuffer(1024));

    strNewDesktop.ReleaseBuffer();


    for (i = 0; i < (DWORD)strNewDesktop.GetLength(); i++)

        if (strNewDesktop.GetAt(i) == '\\')

        {

            MessageBox("Desktop names may not contain backslash characters (\\)");

            return;

        }

   

    for (i = 0; i < dwCount; i++)

    {

        SendDlgItemMessage(IDC_DESKTOP_LIST, LB_GETTEXT, (WPARAM)i,

            (LPARAM)strTmp.GetBuffer(256));

        strTmp.ReleaseBuffer();

        if (!strTmp.CompareNoCase(strNewDesktop))

        {

            strNewDesktop += " is already exist.";

            MessageBox(strNewDesktop, "Info", MB_OK | MB_ICONINFORMATION);

            return;

        }

    }

    szNew = strNewDesktop.GetBuffer(strNewDesktop.GetLength());

    hndDesk = CreateDesktop(szNew, NULL, NULL, 0, MAXIMUM_ALLOWED, NULL);

    if (!hndDesk)

    {

        MessageBox("Cann't create new desktop", "Error", MB_OK | MB_ICONERROR);

        return;

    }

    SendDlgItemMessage(IDC_DESKTOP_LIST, LB_ADDSTRING, 0L, (LPARAM)szNew);

                ZeroMemory(&si, sizeof(si));

                si.cb = sizeof(si);

    si.lpDesktop = szNew;

   

                ZeroMemory(&pi, sizeof(pi));

                if (!CreateProcess(NULL,  // не указываем имя приложения (для этого используем командную строку)

                               __argv[0],           // командная строка

                               NULL,                // атрибуты процесса не наследуются

                               NULL,                // атрибуты потока не наследуются

                               FALSE,               // по умолчанию

                               0,                                            // обязательно создавать новую консоль, если запускаем консольное приложение

                               NULL,                // использовать родительские переменные окружения

                               NULL,                // использовать в качестве папки по умолчанию родительскую папку

                               &si,                 // структура STARTUPINFO, содержащая состояние запускаемого процесса

                               &pi))                // структура PROCESS_INFORMATION, содержащая информацию о созданном процессе

    {

        MessageBox("CreateProcess failed", "Error", MB_OK | MB_ICONERROR);

        CloseDesktop(hndDesk);

        return;

    }

    //CloseDesktop(hndDesk);

    CloseHandle(pi.hThread);

    CloseHandle(pi.hProcess);

}

void CDesktopsDlg::OnCloseDesktop()

{

    HDESK hndDesk;

    CString strTmp;

    int nIndex = SendDlgItemMessage(IDC_DESKTOP_LIST, LB_GETCURSEL);

    if (nIndex == LB_ERR)

        return;

    SendDlgItemMessage(IDC_DESKTOP_LIST, LB_GETTEXT, (WPARAM)nIndex,

        (LPARAM)strTmp.GetBuffer(256));

    strTmp.ReleaseBuffer();

    if (!strTmp.CompareNoCase("default") ||

        !strTmp.CompareNoCase("winlogon") ||

        !strTmp.CompareNoCase("disconnect"))

    {

        MessageBox("You cann't close this desktop", "Info", MB_OK | MB_ICONINFORMATION);

        return;

    }

    hndDesk = OpenDesktop(strTmp.GetBuffer(strTmp.GetLength()),

        DF_ALLOWOTHERACCOUNTHOOK, FALSE, MAXIMUM_ALLOWED);

    if (hndDesk)

        CloseDesktop(hndDesk);

    OnRefreshDesktop();

}

void CDesktopsDlg::OnSwitchToDesktop()

{

    HDESK hndDesk;

    char szBuf[256];

    int nIndex = SendDlgItemMessage(IDC_DESKTOP_LIST, LB_GETCURSEL);

    if (nIndex == LB_ERR)

        return;

    SendDlgItemMessage(IDC_DESKTOP_LIST, LB_GETTEXT, (WPARAM)nIndex, (LPARAM)szBuf);


    hndDesk = OpenDesktop(szBuf, DF_ALLOWOTHERACCOUNTHOOK, FALSE, MAXIMUM_ALLOWED);

    if (!hndDesk)

    {

        MessageBox("Switch failed", "Error", MB_OK | MB_ICONERROR);

        return;

    }

    SwitchDesktop(hndDesk);

    CloseDesktop(hndDesk);

}

void CDesktopsDlg::OnRefreshDesktop()

{

    SendDlgItemMessage(IDC_DESKTOP_LIST, LB_RESETCONTENT, 0L, 0L);

                EnumDesktops(GetProcessWindowStation(), EnumDesktopProc, (LPARAM)m_hWnd);

}

BOOL CALLBACK EnumDesktopProc(LPTSTR lpszDesktop, LPARAM lParam)

{

    HWND hDlg = (HWND)lParam;

    SendDlgItemMessage(hDlg, IDC_DESKTOP_LIST, LB_ADDSTRING, 0L, (LPARAM)lpszDesktop);

    return TRUE;

}


void CDesktopsDlg::OnExecute()

{

                OPENFILENAME ofn;       // common dialog box structure

                char szFile[260];       // buffer for file name

                char szFileBuf[260];

                STARTUPINFO si;

                PROCESS_INFORMATION pi;

                // инициализируем структуру OPENFILENAME для диалога

                ZeroMemory(&ofn, sizeof(ofn));

                ofn.lStructSize = sizeof(ofn);

                ofn.lpstrFile = szFile; // передаем указатель на буфер, в который поместиться имя и путь файла

                //

                // Set lpstrFile[0] to '\0' so that GetOpenFileName does not

                // use the contents of szFile to initialize itself.

                //

                ofn.lpstrFile[0] = '\0';

                ofn.nMaxFile = sizeof(szFile);

    // important values

    ofn.lpstrFilter = "Exe-файлы\0*.exe\0"; // фильтр

    // путь должен существовать, файл -//-, скрываем не нужную галочку

                ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

                // показываем диалог выбора приложения, которое желаем запустить

                if (GetOpenFileName(&ofn) == TRUE)

                {

                               strcpy(szFileBuf, "\"");

                               strcat(szFileBuf, szFile);

                               strcat(szFileBuf, "\"");

        // задаем начальные значения по умолчанию

                               ZeroMemory(&si, sizeof(si));

                               si.cb = sizeof(si); // обязательно указываем размер структуры

       

                               ZeroMemory(&pi, sizeof(pi)); // обнуляем структуру, в которую поместится информация

                                     // о запущенном процессе, чтобы не было ничего "левого"

                               // Start the child process.

                               if (!CreateProcess(NULL, // не указываем имя приложения (для этого используем командную строку)

                                               szFileBuf,                                // командная строка

                                               NULL,             // атрибуты процесса не наследуются

                                               NULL,             // атрибуты потока не наследуются

                                               FALSE,            // по умолчанию

                                               CREATE_NEW_CONSOLE, // обязательно создавать новую консоль, если запускаем консольное приложение

                                               NULL,             // использовать родительские переменные окружения

                                               NULL,             // использовать в качестве папки по умолчанию родительскую папку

                                               &si,              // структура STARTUPINFO, содержащая состояние запускаемого процесса

                                               &pi)              // структура PROCESS_INFORMATION, содержащая информацию о созданном процессе

                               )

                               {

                                               MessageBox("Launch failed", "Error", MB_OK | MB_ICONERROR);

                                               return;

                               }

                               // освобождаем ресурсы системы

                               CloseHandle(pi.hProcess); // для процесса

                               CloseHandle(pi.hThread);  // для потока

                }

}

#if !defined(AFX_DESKTOPSDLG_H__C6780298_A512_4CDB_AA9F_200D0CCFCF2D__INCLUDED_)

#define AFX_DESKTOPSDLG_H__C6780298_A512_4CDB_AA9F_200D0CCFCF2D__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////

// CDesktopsDlg dialog

class CDesktopsDlg : public CDialog

{

// Construction

public:

                CDesktopsDlg(CWnd* pParent = NULL);     // standard constructor

// Dialog Data

                //{{AFX_DATA(CDesktopsDlg)

                enum { IDD = IDD_DESKTOPS_DIALOG };

                               // NOTE: the ClassWizard will add data members here

                //}}AFX_DATA

                // ClassWizard generated virtual function overrides

                //{{AFX_VIRTUAL(CDesktopsDlg)

                protected:

                virtual void DoDataExchange(CDataExchange* pDX);              // DDX/DDV support

                //}}AFX_VIRTUAL

// Implementation

protected:

                HICON m_hIcon;

                // Generated message map functions

                //{{AFX_MSG(CDesktopsDlg)

                virtual BOOL OnInitDialog();

                afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

                afx_msg void OnPaint();

                afx_msg HCURSOR OnQueryDragIcon();

                afx_msg void OnCreateDesktop();

                afx_msg void OnCloseDesktop();

                afx_msg void OnSwitchToDesktop();

                afx_msg void OnRefreshDesktop();

                afx_msg void OnExecute();

                //}}AFX_MSG

                DECLARE_MESSAGE_MAP()

};

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DESKTOPSDLG_H__C6780298_A512_4CDB_AA9F_200D0CCFCF2D__INCLUDED_)

#if !defined(AFX_DESKTOPS_H__A4B8D967_1189_432B_AF31_C124D7E25226__INCLUDED_)

#define AFX_DESKTOPS_H__A4B8D967_1189_432B_AF31_C124D7E25226__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__

                #error include 'stdafx.h' before including this file for PCH

#endif

#include "resource.h"                        // main symbols

/////////////////////////////////////////////////////////////////////////////

// CDesktopsApp:

// See Desktops.cpp for the implementation of this class

//

class CDesktopsApp : public CWinApp

{

public:

                CDesktopsApp();

// Overrides

                // ClassWizard generated virtual function overrides

                //{{AFX_VIRTUAL(CDesktopsApp)

                public:

                virtual BOOL InitInstance();

                //}}AFX_VIRTUAL

// Implementation

                //{{AFX_MSG(CDesktopsApp)

                //}}AFX_MSG

                DECLARE_MESSAGE_MAP()

};


/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DESKTOPS_H__A4B8D967_1189_432B_AF31_C124D7E25226__INCLUDED_)

1. Сочинение на тему Сочинения на свободную тему - Написание своей былины
2. Курсовая на тему Проектирование ферм и сельскохозяйственных комплексов
3. Реферат Семь главных проблем российского образования
4. Реферат на тему The Connectio Between Animal Cruelty And Human
5. Лекция Курс лекций по Политологии 5
6. Реферат на тему Берлинская Стена
7. Курсовая Кризис. Причины возникновения и пути преодоления
8. Реферат на тему Consequences Of The 30 Years War Essay
9. Реферат Тер-Габриэлян, Саак Мирзоевич
10. Реферат История антисемитизма 2