Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
55
Добавлен:
06.05.2013
Размер:
5.28 Кб
Скачать
#include <windows.h>
#include <stdio.h>
#include "resource.h"

LRESULT CALLBACK WinFunc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK OwnFunc(HWND,UINT,WPARAM,LPARAM);
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);

HINSTANCE hTI;
char szWinName[]="MainWin";
char szOwnName[]="OwnedWin";
HWND hwnd;
HWND hown;
HDC memdc;

HBRUSH gr_b;
HBRUSH tr_b;

BOOL flg=FALSE;

float rad=0;
int tmo=0;

int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)
{
	MSG msg;
	WNDCLASS wcl,owned;
	
	int wx,wy;
	char st[60];
	
	hTI=hThisInst;

	wcl.hInstance=hThisInst;
	wcl.lpszClassName=szWinName;
	wcl.lpfnWndProc=WinFunc;
	wcl.style=0;
	wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
	wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
	wcl.lpszMenuName=(LPSTR)MENU1;
	wcl.cbClsExtra=0;
	wcl.cbWndExtra=0;
	wcl.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_BRUSH);

	owned.hInstance=hThisInst;
	owned.lpszClassName=szOwnName;
	owned.lpfnWndProc=OwnFunc;
	owned.style=CS_NOCLOSE;
	owned.hIcon=LoadIcon(NULL,IDI_APPLICATION);
	owned.hCursor=LoadCursor(NULL,IDC_CROSS);
	owned.lpszMenuName=NULL;
	owned.cbClsExtra=0;
	owned.cbWndExtra=0;
	owned.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_BRUSH);

	if (!RegisterClass (&wcl)) return 0;
	if (!RegisterClass (&owned)) return 0;
		
	wx=GetSystemMetrics(SM_CXMAXIMIZED)-2*GetSystemMetrics(SM_CXFRAME);
	wy=GetSystemMetrics(SM_CYMENU)+GetSystemMetrics(SM_CYCAPTION)+2*GetSystemMetrics(SM_CYFRAME);
	
	hwnd=CreateWindow(szWinName,"Main Window", WS_OVERLAPPEDWINDOW
		,0,0,wx,wy,	HWND_DESKTOP,NULL,hThisInst,NULL);

		GetPrivateProfileString("App1","Radius","0.5",st,20,"wc.ini");
		rad=(float)atof(st);
		if ((rad<0.2)||(rad>10)) DialogBox(hTI,MAKEINTRESOURCE(DIALOG1),hwnd,DlgProc);
		tmo=GetPrivateProfileInt("App1","Timeout",5,"wc.ini");
		if (tmo<=0) tmo=5;

	sprintf(st,"Owned Window (Timeout=%d sec.)",tmo);
	hown=CreateWindow(szOwnName,st,WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
		hwnd,NULL,hThisInst,NULL);
	
	ShowWindow(hown,nWinMode);
	UpdateWindow(hown);
	ShowWindow(hwnd,nWinMode);
	UpdateWindow(hwnd);

	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	sprintf(st,"%f",rad);
	WritePrivateProfileString("App1","Radius",st,"wc.ini");
	sprintf(st,"%d",tmo);
	WritePrivateProfileString("App1","Timeout",st,"wc.ini");

	return 1;
}

int maxX,maxY;

LRESULT CALLBACK OwnFunc(HWND hown, UINT message,WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;
	HBITMAP hbit;
	int x1,y1,x2,y2;
		
	switch (message)
	{
	case WM_CREATE:
		maxX=GetSystemMetrics(SM_CXSCREEN);
		maxY=GetSystemMetrics(SM_CYSCREEN);

		hdc=GetDC(hown);
		memdc=CreateCompatibleDC(hdc);
		hbit=CreateCompatibleBitmap(hdc,maxX,maxY);
		SelectObject(memdc,hbit);
		gr_b=GetStockObject(LTGRAY_BRUSH);
		tr_b=GetStockObject(NULL_BRUSH);
		
		SelectObject(memdc,gr_b);
		PatBlt(memdc,0,0,maxX,maxY,PATCOPY);
		ReleaseDC(hown,hdc);
		break;
	case WM_PAINT:
		hdc=BeginPaint(hown,&ps);
		BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY);
		EndPaint(hown,&ps);
		break;
	case WM_LBUTTONDOWN:
		KillTimer(hown,115);
        hdc=GetDC(hwnd);
		SelectObject(memdc,tr_b);
		//SelectObject(memdc,GetStockObject(BLACK_PEN));

		x1=LOWORD(lParam)-(int)(rad*100);
		x2=LOWORD(lParam)+(int)(rad*100);
		y1=HIWORD(lParam)-(int)(rad*100);
		y2=HIWORD(lParam)+(int)(rad*100);

		Ellipse(memdc,x1,y1,x2,y2);
		RedrawWindow(hown,NULL,NULL,RDW_INVALIDATE);

		//SetTimer(hown,115,1000*tmo,NULL);
		//flg=FALSE;
		break;	
	case WM_MENUCHAR:
		SetFocus(hwnd);
		PostMessage(hwnd,WM_SYSCHAR,wParam,1|(1L<<29));
		break;
	case WM_TIMER:
		PostMessage(hwnd,WM_COMMAND,ID_CLEAR,0);
		flg=TRUE;
		break;
	default:
		return DefWindowProc(hown,message,wParam,lParam);
	}
	return 0;
}

LRESULT CALLBACK WinFunc(HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam)
{
switch (message)
	{
	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case ID_EXIT:
			PostMessage(hwnd,WM_CLOSE,0,0);
			break;
		case ID_CLEAR:
			SelectObject(memdc,gr_b);
			PatBlt(memdc,0,0,maxX,maxY,PATCOPY);
			RedrawWindow(hown,NULL,NULL,RDW_INVALIDATE);
			break;
		case ID_DIALOG:
			DialogBox(hTI,MAKEINTRESOURCE(DIALOG1),hwnd,DlgProc);
			break;
		}
		break;
	case WM_CLOSE:
		if(MessageBox(hwnd,"Are you sure?","HangUp",MB_YESNO|MB_ICONQUESTION)==IDYES) DestroyWindow(hwnd);

		

		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hwnd,message,wParam,lParam);
	}
	return 0;
}

BOOL CALLBACK DlgProc(HWND hDlg,UINT uMsg,WPARAM wPar,LPARAM lPar)
{
	char str[80];

	switch(uMsg)
	{
	case WM_INITDIALOG:
		sprintf(str,"%4.2f",rad);
		SetDlgItemText(hDlg,ID_EDIT,str);
		return TRUE;
	case WM_COMMAND:
		switch(LOWORD(wPar))
		{
		case IDOK:
			GetDlgItemText(hDlg,ID_EDIT,str,80);
			if(((float)atof(str)<0.2)||((float)atof(str)>10)){MessageBox(hDlg,"Должно быть число от 0.2 до 10","Ошибка",MB_ICONEXCLAMATION|MB_OK);return FALSE;};
			rad=(float)atof(str);
			EndDialog(hDlg,TRUE);
			return TRUE;
		case IDCANCEL:
			EndDialog(hDlg,TRUE);
			return TRUE;
		}
	}
	return FALSE;
}
Соседние файлы в папке Circles
  • #
    06.05.20134.02 Кб53winc.dsp
  • #
    06.05.2013531 б52winc.dsw
  • #
    06.05.201341.98 Кб52winc.ncb
  • #
    06.05.201348.64 Кб52winc.opt
  • #
    06.05.2013827 б52winc.plg
  • #
    06.05.20135.28 Кб55Wincsrc.c