📄 cmini.cpp
字号:
//
// Cmini.CPP
// Using a menu to size a graphics figure.
// Copyright (c) Yi_chunhai
//
#include <windows.h>
#include "Cmini.h"
#include <string.h>
#include <stdlib.h>
#include "lgass.c"
#include "lerrf.c"
#include "lgam2.c"
#include "lgam1.c"
#include "C_mini.c"
#include "resource.h"
LONG FAR PASCAL WndProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK AboutDiaProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK InputDiaProc(HWND,UINT,WPARAM,LPARAM);
char szProgName[]="ProgName";
char szApplName[]="IDR_MENU1";
char szIconName[]="MyIcon";
char szXString[80]="x-axis label";
char szYString[80]="y-axis label";
char szNString[80]="1";
char szC00String[80],szC01String[80],szC10String[80],szC11String[80];
double iPtxSize[1]={1};
double iPtySize[4]={0,1,2,0};
static WORD wSize=25;
// Remove next line for Microsoft C++ compile
//#pragma argsused
int PASCAL WinMain(HINSTANCE hInst,HINSTANCE hPreInst,
LPSTR lpszCmdLine,int nCmdShow)
{
HWND hWnd;
MSG lpMsg;
WNDCLASS wcApp;
if (!hPreInst) {
wcApp.lpszClassName=szProgName;
wcApp.hInstance =hInst;
wcApp.lpfnWndProc =WndProc;
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
wcApp.hIcon =LoadIcon(hInst,szIconName);
wcApp.lpszMenuName =szApplName;
wcApp.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wcApp.style =CS_HREDRAW|CS_VREDRAW;
wcApp.cbClsExtra =0;
wcApp.cbWndExtra =0;
if (!RegisterClass (&wcApp))
return FALSE;
}
// hWnd=CreateWindow(szProgName,"最小代价曲线图",
// WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,
// CW_USEDEFAULT,CW_USEDEFAULT,
// CW_USEDEFAULT,(HWND)NULL,(HMENU)NULL,
// (HANDLE)hInst,NULL);
hWnd = CreateWindow(szProgName, "最小代价曲线图", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&lpMsg,NULL,NULL,NULL)) {
TranslateMessage(&lpMsg);
DispatchMessage(&lpMsg);
}
return(lpMsg.wParam);
}
LRESULT CALLBACK AboutDiaProc(HWND hdlg,UINT messg,
WPARAM wParam,LPARAM lParam)
{
switch (messg)
{
case WM_INITDIALOG:
break;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
EndDialog(hdlg,TRUE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
LRESULT CALLBACK InputDiaProc(HWND hdlg,UINT messg,
WPARAM wParam,LPARAM lParam)
{
switch (messg)
{
case WM_INITDIALOG:
SetDlgItemText(hdlg,IDC_EDITN,szNString);
SetDlgItemText(hdlg,IDC_EDIT00,szC00String);
SetDlgItemText(hdlg,IDC_EDIT01,szC01String);
SetDlgItemText(hdlg,IDC_EDIT10,szC10String);
SetDlgItemText(hdlg,IDC_EDIT11,szC11String);
return FALSE;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
GetDlgItemText(hdlg,IDC_EDITN,szNString,80);
GetDlgItemText(hdlg,IDC_EDIT00,szC00String,80);
GetDlgItemText(hdlg,IDC_EDIT01,szC01String,80);
GetDlgItemText(hdlg,IDC_EDIT10,szC10String,80);
GetDlgItemText(hdlg,IDC_EDIT11,szC11String,80);
iPtxSize[0]=atof(szNString);
iPtySize[0]=atof(szC00String);
iPtySize[1]=atof(szC01String);
iPtySize[2]=atof(szC10String);
iPtySize[3]=atof(szC11String);
EndDialog(hdlg,TRUE);
break;
case IDCANCEL:
EndDialog(hdlg,FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
LONG FAR PASCAL WndProc(HWND hWnd,UINT messg,
WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
double C00=iPtySize[0],C01=iPtySize[1],C10=iPtySize[2],C11=iPtySize[3],P0,CM;
double N=iPtxSize[0];
_gcvt( N, 3, szNString );
_gcvt( C00, 3, szC00String );
_gcvt( C01, 3, szC01String );
_gcvt( C10, 3, szC10String );
_gcvt( C11, 3, szC11String );
int i=0;
int P[1001],C[1001];
for(i=0;i<=1000;i++){
P0=i*0.001;
CM=C_mini(C00,C01,C10,C11,P0,N);
P[i]=(int)(P0*400);
C[i]=(int)(CM*240/0.6);
}
static HFONT hOFont,hNFont;
static HPEN hOPen,hNPen;
static FARPROC fpfnAboutDiaProc;
static FARPROC fpfnInputDiaProc;
static HINSTANCE hInst1,hInst2;
static int xClientView,yClientView;
int xtic,ytic;
char *Strxptr="0.20.40.60.81.0",*Stryptr="0.2k0.4k0.6k";
char Org1='0';
char *xLabel="P0",*yLabel="Cmin",*Nstrptr="N=";
switch (messg)
{
case WM_SIZE:
xClientView=LOWORD(lParam);
yClientView=HIWORD(lParam);
break;
case WM_CREATE:
hInst1=((LPCREATESTRUCT) lParam)->hInstance;
hInst2=((LPCREATESTRUCT) lParam)->hInstance;
fpfnAboutDiaProc=MakeProcInstance((FARPROC)AboutDiaProc,
hInst1);
fpfnInputDiaProc=MakeProcInstance((FARPROC)InputDiaProc,
hInst2);
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//--------- my routines below ---------
// Set View Port and Map Mode
SetMapMode(hdc,MM_ISOTROPIC);
SetWindowExtEx(hdc,640,400,NULL);
SetViewportExtEx(hdc,xClientView,-yClientView,NULL);
SetViewportOrgEx(hdc,150,yClientView-90,NULL);
// Print Text to Screen
hNFont=CreateFont(12,12,0,0,FW_BOLD,
FALSE,FALSE,FALSE,OEM_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
VARIABLE_PITCH|FF_ROMAN,
"Roman");
hOFont=(HFONT)SelectObject(hdc,hNFont);
TextOut(hdc,(200-(strlen(szXString)*10/2)),
-50,szXString,strlen(szXString));
TextOut(hdc,200,-30,Nstrptr,2);
TextOut(hdc,240,-30,szNString,strlen(szNString));
hNFont=CreateFont(9,9,0,0,FW_BOLD,
FALSE,FALSE,FALSE,OEM_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
FIXED_PITCH|FF_SCRIPT,
"Script");
hOFont=(HFONT)SelectObject(hdc,hNFont);
for(i=0;i<5;i++)
TextOut(hdc,(80+i*80)-10,
-5,Strxptr+i*3,3);
for(i=0;i<3;i++)
TextOut(hdc,-50,
(80+i*80)+5,Stryptr+i*4,4);
TextOut(hdc,-5,-5,&Org1,1);
TextOut(hdc,430,-10,xLabel,2);
TextOut(hdc,-40,255,yLabel,4);
hNFont=CreateFont(12,12,-900,900,FW_BOLD,
FALSE,FALSE,FALSE,
OEM_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
VARIABLE_PITCH|FF_ROMAN,
"Roman");
hOFont=(HFONT)SelectObject(hdc,hNFont);
TextOut(hdc,-100,30+(strlen(szXString)*10/2),
szYString,strlen(szYString));
// Draw Coordinate Axis
hNPen=CreatePen(PS_SOLID,1,PALETTERGB(0x00,0x00,0xFF));
hOPen=(HPEN)SelectObject(hdc,hNPen);
MoveToEx(hdc,0,250,NULL);
LineTo(hdc,0,0);
LineTo(hdc,450,0);
LineTo(hdc,440,5);
MoveToEx(hdc,450,0,NULL);
LineTo(hdc,440,-5);
MoveToEx(hdc,0,250,NULL);
LineTo(hdc,5,240);
MoveToEx(hdc,0,250,NULL);
LineTo(hdc,-5,240);
// Draw X axis tic marks
xtic=0;
for (i=0;i<=10;i++) {
ytic=3;
MoveToEx(hdc,xtic,ytic,NULL);
ytic=0;
LineTo(hdc,xtic,ytic);
xtic+=40;
}
// Draw Y axis tic marks
ytic=0;
for (i=0;i<=6;i++) {
xtic=0;
MoveToEx(hdc,xtic,ytic,NULL);
xtic=3;
LineTo(hdc,xtic,ytic);
ytic+=40;
}
//Draw C_P
MoveToEx(hdc,P[0],C[0],NULL);
for(i=0;i<=1000;i++){
LineTo(hdc,P[i],C[i]);
}
SelectObject(hdc,hOFont);
DeleteObject(hNFont);
SelectObject(hdc,hOPen);
DeleteObject(hNPen);
//--------- my routines above ---------
ValidateRect(hWnd,NULL);
EndPaint(hWnd,&ps);
break;
case WM_COMMAND:
switch (wParam)
{
case IDM_INPUT:
DialogBox(hInst2,"InputDiaBox",
hWnd,(DLGPROC)InputDiaProc);
break;
case IDM_ABOUT:
DialogBox(hInst1,"AboutDiaBox",hWnd,
(DLGPROC)AboutDiaProc);
break;
default:
break;
}
InvalidateRect(hWnd,NULL,TRUE);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd,messg,wParam,lParam));
}
return(0L);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -