⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmini.cpp

📁 统计信号处理中计算最小代价
💻 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 + -