Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_3_slaydy_2012.doc
Скачиваний:
5
Добавлен:
18.08.2019
Размер:
376.32 Кб
Скачать

If(IsIconic(hwnd)) ShowWindow(hwnd,sw_restore);

SW_RESTORE - активизирует и отображает окно. Если окно минимизировано или развернуто, Windows восстанавливает его в первоначальном размере и позиции (то же самое, что и SW_SHOWNORMAL).

Шаг 4)

Перемещаем окно первого экземпляра на передний план:

SetForegroundWindow(hwnd);

Затем второй экземпляр приложения завершает работу.

Шаг 5)

В случае, если предыдущий экземпляр приложения не найден, то регистрируем класс окна:

If (!RegClass(WndProc,szMainClass,color_desktop))

return FALSE;

Шаг 6)

Для создания максимально распахнутого окна приложения необходимо определить ширину и высоту экрана в пикселях:

int w=GetSystemMetrics(SM_CXSCREEN);

int h=GetSystemMetrics(SM_CYSCREEN);

Шаг 7)

Создаём окно:

Hwnd=CreateWindow(szMainClass,szTitle,WS_POPUPWINDOW|WS_CAPTION|WS_MINIMIZEBOX|WS_VISIBLE,0,0,w,h,0,0,hInstance,NULL);

Стиль WS_POPUPWINDOW|WS_CAPTION|WS_MINIMIZEBOX|WS_VISIBLE указывает на временное окно с кнопкой минимизации и заголовком.

Шаг 8)

Далее создаём цикл обработки сообщений приложения:

while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg);

Так как приложение не предусматривает обработки сообщений от клавиатуры, то в цикле отсутствует вызов функции трансляции клавиатурных сообщений.

Шаг 9)

Создаём оконную процедуру:

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)

{switch(msg)

{

case WM_DESTROY:

{PostQuitMessage(0); return 0;}

}

return DefWindowProc(hwnd,msg,wParam,lParam);

}

______________________________________________________________

Листинг 1:

#include <windows.h>

#include<tchar.h> // for UNICODE charset

bool RegClass(WNDPROC,LPCTSTR,UINT);

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

HINSTANCE hInstance;

TCHAR szMainClass[]=_T("MainClass");

TCHAR szTitle[]=_T("Пример 1.1");

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,

LPSTR lpszCmdLine, int nCmdShow)

{

MSG msg;

hInstance=hInst;

HWND hwnd=FindWindow(szMainClass,szTitle);

if (hwnd)

{

MessageBox(hwnd,_T("Можно запускать только один экземпляр приложения!\n")

_T("Перемещаю на передний план первый экземпляр"),

szTitle,MB_OK|MB_ICONSTOP);

if (IsIconic(hwnd))

ShowWindow(hwnd,SW_RESTORE);

SetForegroundWindow(hwnd);

return 0;

}

if (!RegClass(WndProc,szMainClass,COLOR_DESKTOP))

return FALSE;

int w=GetSystemMetrics(SM_CXSCREEN)-1;

int h=GetSystemMetrics(SM_CYSCREEN)-1;

hwnd=CreateWindow(szMainClass,szTitle,WS_POPUPWINDOW|WS_CAPTION|

WS_MINIMIZEBOX|WS_VISIBLE,

0,0,w,h,0,0,hInstance,NULL);

if (!hwnd) return FALSE;

while (GetMessage(&msg,0,0,0))

DispatchMessage(&msg);

return msg.wParam;

}

bool RegClass(WNDPROC Proc,LPCTSTR szName,UINT brBackground)

{

WNDCLASS wc;

wc.style=wc.cbClsExtra=wc.cbWndExtra=0;

wc.lpfnWndProc=Proc;

wc.hInstance=hInstance;

wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);

wc.hCursor=LoadCursor(NULL,IDC_ARROW);

wc.hbrBackground=(HBRUSH)(brBackground+1);

wc.lpszMenuName=(LPCTSTR)NULL;

wc.lpszClassName=szName;

return (RegisterClass(&wc)!=0);

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)

{switch(msg)

{

case WM_DESTROY:

{PostQuitMessage(0); return 0;}

}

return DefWindowProc(hwnd,msg,wParam,lParam);

}

Самостоятельно на практике: Приведенный код перевести на ассемблер.

45

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]