Разработка интерактивного меню
#include "windows.h"
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define up 72
#define down 80
#define enter 13
#define esc 27
HDC hDC;
HWND hWnd;
RECT Rect;
HPEN hPen, hOldPen;
HBRUSH hBrush, hOldBrush;
HFONT hFont,hOldFont;
LOGFONT Lf={0};
typedef struct
{
int x[4];
COLORREF col;
char *text;
}Knopka;
typedef struct
{
Knopka *P;
int n, m;
}Menu;
void clearscreen()
{
hPen=CreatePen(PS_SOLID,4,RGB(0,0,255));
hOldPen=(HPEN)SelectObject(hDC,hPen);
hBrush=CreateSolidBrush(RGB(0,0,255));
hOldBrush=(HBRUSH)SelectObject(hDC,hBrush);
Rectangle(hDC,Rect.left,Rect.top,Rect.right,Rect.bottom);
SelectObject(hDC,hOldPen);
DeleteObject(hPen);
SelectObject(hDC,hOldBrush);
DeleteObject(hBrush);
}
void knopka(Knopka *P)
{
hPen=CreatePen(PS_SOLID,4,RGB(255,255,255));
hOldPen=(HPEN)SelectObject(hDC,hPen);
hBrush=CreateSolidBrush(RGB(255,255,255));
hOldBrush=(HBRUSH)SelectObject(hDC,hBrush);
hFont=CreateFontIndirect(&Lf);
hOldFont=(HFONT)SelectObject(hDC,hFont);
Rectangle(hDC,P->x[0]-4,P->x[1]-4,P->x[0]+P->x[2]+4,
P->x[1]+P->x[3]+4);
SelectObject(hDC,hOldPen);
DeleteObject(hPen);
SelectObject(hDC,hOldBrush);
DeleteObject(hBrush);
hPen=CreatePen(PS_SOLID,4,RGB(0,0,0));
hOldPen=(HPEN)SelectObject(hDC,hPen);
hBrush=CreateSolidBrush(RGB(0,0,0));
hOldBrush=(HBRUSH)SelectObject(hDC,hBrush);
Rectangle(hDC,P->x[0],P->x[1],P->x[0]+P->x[2]+4,
P->x[1]+P->x[3]+4);
SelectObject(hDC,hOldPen);
DeleteObject(hPen);
SelectObject(hDC,hOldBrush);
DeleteObject(hBrush);
hPen=CreatePen(PS_SOLID,4,P->col);
hOldPen=(HPEN)SelectObject(hDC,hPen);
hBrush=CreateSolidBrush(P->col);
hOldBrush=(HBRUSH)SelectObject(hDC,hBrush);
Rectangle(hDC,P->x[0],P->x[1],P->x[0]+P->x[2],
P->x[1]+P->x[3]);
SelectObject(hDC,hOldPen);
DeleteObject(hPen);
SelectObject(hDC,hOldBrush);
DeleteObject(hBrush);
SetTextColor(hDC,RGB(0,0,0));
SetBkColor(hDC,P->col);
TextOut(hDC,P->x[0]+2,P->x[1]+2,(LPCSTR)P->text,
strlen(P->text));
SelectObject(hDC,hOldFont);
|
|
DeleteObject(hFont);
}
Menu menu_init(char* punkt[],int l,int top,int width,int height,int n)
{
int i;
Menu M; M.n=n; M.m=0;
M.P=new Knopka[n];
for(i=0;i<n;i++)
{
M.P[i].x[0]=l;
if(i==0)M.P[i].x[1]=top;
else M.P[i].x[1]=M.P[i-1].x[1]+M.P[i-1].x[3]+10;
M.P[i].x[2]=width;
M.P[i].x[3]=height;
M.P[i].text=new char[strlen(punkt[i])+1];
strcpy(M.P[i].text,punkt[i]);
}
return M;
}
void menu_del(Menu *M)
{
int i;
for(i=0;i<M->n;i++)
delete []M->P[i].text;
delete[]M->P;
}
int menu_vert(Menu *M)
{
int i;
char ch;
do
{
for(i=0;i<M->n;i++)
{
if(M->m==i) M->P[i].col=RGB(0,255,0);
else M->P[i].col=RGB(255,255,0);
knopka(&(M->P[i]));
}
ch=getch();
switch(ch)
{
case up: if(M->m==0) M->m=M->n-1;
else (M->m)--;
break;
case down: if(M->m==M->n-1) M->m=0;
else (M->m)++;
}
}
while (ch!=enter && ch!=esc);
if(ch==esc) M->m=M->n-1;
return M->m;
}
// menu_gr.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "MENU_win.h"
#include <dos.h>
void vivodtext(int x,int y,char* s)
{
hFont=CreateFontIndirect(&Lf);
hOldFont=(HFONT)SelectObject(hDC,hFont);
SetTextColor(hDC,RGB(0,0,0));
SetBkColor(hDC,RGB(255,255,0));
TextOut(hDC,x,y,(LPCSTR)s,strlen(s));
SelectObject(hDC,hOldFont);
DeleteObject(hFont);
}
int _tmain(int argc, _TCHAR* argv[])
{
hWnd=GetConsoleWindow();
if(!hWnd)
{
printf("Can't get hWnd of console!\n");
getch();
return -1;
}
MoveWindow(hWnd,0,0,800,600,TRUE);
hDC=GetDC(hWnd);
if(!hDC)
{
printf("Can't get device context!\n");
getch();
return -2;
}
GetClientRect(hWnd,&Rect);
clearscreen();
char *S[]={"Input ","Output ","Record ","Exit "};
|
|
int m=0;
Menu M=menu_init(S,4,4,60,30,4);
Do
{
m=menu_vert(&M);
Switch(m)
{
case 0:
vivodtext(100,200,"First punkt");
getch();
break;
case 1:vivodtext(100,240,"Second punkt");
getch();
break;
case 2:vivodtext(100,280,"Three punkt");
getch();
}
}
while(m!=3);
menu_del(&M);
ReleaseDC(hWnd, hDC);
return 0;
}
Функция SetDCPenColor
Функция SetDCPenColor устанавливает цвет пера в текущем контексте устройства (DC) в заданный код цвета. Если устройство не может представить устанавливаемый код цвета, цвет устанавливается в самый близкий реальный цвет.
Синтаксис
COLORREF SetDCPenColor( HDChdc,//дескриптор контекста устройства (DC) COLORREFcrColor //новый цвет пера ); |
Параметры
Hdc
[in] Дескриптор контекста устройства (DC).
CrColor
[in] Устанавливает новый цвет пера.
Возвращаемые значения
Если функция завершается успешно, возвращаемое значение определяет предыдущий цвет пера контекста устройства (DC) как значение COLORREF. Если функция завершается ошибкой, возвращаемое значение - CLR_INVALID.
Замечания
Функция возвращает предыдущий цвет DC_PEN, даже если предопределенное перо DC_PEN не выбрано в контексте устройства (DC); однако, оно не будет использовано в операциях рисования до тех пор, пока предопределение DC_PEN не будет выбрано в контексте устройства (DC).
|
|
Функция GetStockObject с параметром DC_BRUSH или DC_PEN может быть использована взаимозаменяемо с функциями SetDCPenColor и SetDCBrushColor.
ICM: Управление цветом выполняется тогда, когда разрешается Независимое управление цветом ( ICM).
Функция SetDCBrushColor
Функция SetDCBrushColor устанавливает в текущий контекст устройства (DC) цвет кисти по заданному коду цвета. Если устройство не может представить указанный код цвета, цвет устанавливается самый близкий к реальному цвету.
Синтаксис
COLORREF SetDCBrushColor( HDChdc,//дескриптор контекста устройства (DC) COLORREFcrColor//новый цвет кисти ); |
Параметры
Hdc
[in] Дескриптор контекста устройства (DC).
CrColor
[in] Определяет новый цвет кисти.
Возвращаемые значения
Если функция завершается успешно, возвращаемое значение устанавливает предыдущий цвет кисти в контексте устройства (DC) как значение COLORREF.
Если функция завершается ошибкой, возвращаемое значение - CLR_INVALID.
Замечания
Когда в контексте устройства (DC) выбирается заготовка кисти DC_BRUSH, все последующие рисунки должны использовать цвет этой кисти в контексте устройства (DC) до тех пор, пока не будет отменен её выбор. По умолчанию цвет DC_BRUSH является БЕЛЫМ.
|
|
Функция возвращает значение цвета предыдущий DC_BRUSH, даже если предопределенная кисть DC_BRUSH в контексте устройства (DC) не выбрана: однако, она не будет использоваться в операциях рисования до тех пор, пока заготовка DC_BRUSH не будет выбрана в контексте устройства (DC).
Функция GetStockObject с параметром DC_BRUSH или DC_PEN может использоваться попеременно с функциями SetDCPenColor и SetDCBrushColor.
Независимое управление цветом (ICM): Управление цветом выполняется тогда, если ICM включено.
Функция UpdateWindow
Функция UpdateWindow обновляет рабочую область заданного окна, отправляя сообщение WM_PAINT окну, если регион обновления окна не пуст. Функция отправляет сообщение WM_PAINTнепосредственно оконной процедуре указанного окна, обходя очередь приложения. Если регион обновления пуст, никакое сообщение не отправляется.
Синтаксис
BOOL UpdateWindow( HWND hWnd//дескриптор окна); |
Параметры
HWnd
[in] Дескриптор обновляемого окна.
Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - не нуль.
Если функция завершается ошибкой, возвращаемое значение - нуль.
Windows NT/2000/XP:Чтобы получить дополнительную информацию об ошибке, вызовитеGetLastError.
Дата добавления: 2018-06-01; просмотров: 268; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!