📄 global.cpp
字号:
// Global.cpp: implementation of the CGlobal class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Faction.h"
#include "Global.h"
#include <math.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CGlobal G;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGlobal::CGlobal()
{
m_bESCStop=FALSE;
m_rgbBackground = RGB(0,0,0);
}
CGlobal::~CGlobal()
{
}
/*
Option Explicit
'======================================================================
'一些 API 调用 和 封装的调用函数
'======================================================================
'API
'用指定颜色绘制一个点
Public Declare Function SetPixelV Lib "gdi32" _
(ByVal hdc As Long, ByVal x As Long, _
ByVal y As Long, ByVal crColor As Long) As Long
'用指定颜色绘制一个点,并返回实际设置的值
Public Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
'获得指定点的颜色值
Public Declare Function GetPixel Lib "gdi32" _
(ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
'程序暂停指定时间
Public Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)
'获取图片像素编码性质
Public Declare Function GetPixelFormat Lib "gdi32" (ByVal hdc As Long) As Long
Public Type PIXELFORMATDESCRIPTOR '像素性质设置时使用
nSize As Integer
nVersion As Integer
dwFlags As Long
iPixelType As Byte
cColorBits As Byte
cRedBits As Byte
cRedShift As Byte
cGreenBits As Byte
cGreenShift As Byte
cBlueBits As Byte
cBlueShift As Byte
cAlphaBits As Byte
cAlphaShift As Byte
cAccumBits As Byte
cAccumRedBits As Byte
cAccumGreenBits As Byte
cAccumBlueBits As Byte
cAccumAlphaBits As Byte
cDepthBits As Byte
cStencilBits As Byte
cAuxBuffers As Byte
iLayerType As Byte
bReserved As Byte
dwLayerMask As Long
dwVisibleMask As Long
dwDamageMask As Long
End Type
'设置图片像素编码方式
Public Declare Function SetPixelFormat Lib "gdi32" (ByVal hdc As Long, ByVal N As Long, pcPixelFormatDescriptor As PIXELFORMATDESCRIPTOR) As Long
Public Const SWP_NOMOVE = &H2
Public Const HWND_TOPMOST = -1
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOACTIVATE = &H10
Public Const HWND_NOTOPMOST = -2
'API 用来实现设置顶层窗口
Public Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long
'API
Public Const SW_NORMAL = 1
'外部调用
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Const SPIF_SENDWININICHANGE = &H2
Public Const SPIF_UPDATEINIFILE = &H1
Public Const SPI_SETDESKWALLPAPER = 20
'设置桌面用
Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" _
(ByVal uAction As Long, _
ByVal uParam As Long, _
ByRef lpvParam As Any, _
ByVal fuWinIni As Long) As Long
'获得Windows所在目录名称
Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" _
(ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
'获得图像数据
Public Declare Function GetBitmapBits Lib "gdi32" _
(ByVal hBitmap As Long, _
ByVal dwCount As Long, _
lpBits As Any) As Long
'设置图像数据
Public Declare Function SetBitmapBits Lib "gdi32" _
(ByVal hBitmap As Long, _
ByVal dwCount As Long, _
lpBits As Any) As Long
Public Sub SetWallPaper(PicBox As PictureBox)
'设置桌面图片
Dim fileName As String, temp As String
Dim i As Long, k As Long
temp = String(255, 0)
GetWindowsDirectory temp, 256
temp = Left(temp, InStr(1, temp, Chr(0)) - 1)
If Right(temp, 1] = "\" Then temp = Left(temp, Len(temp) - 1)
fileName = temp + "\HssNiuDunWallPaper.bmp"
SavePicture PicBox.Image, fileName
DoEvents
'Call ClearWallPaper
Call SetWallPaperA(fileName)
End Sub
Public Sub ClearWallPaper()
'清除桌面图片
Dim temp As Long
temp = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, ByVal "(None)", _
SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
'MsgBox temp
End Sub
Public Sub SetWallPaperA(BitmapFile As String)
'设置桌面图片API调用
Dim temp As Long
temp = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, ByVal BitmapFile, _
SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
'MsgBox temp
'SystemParametersInfo SPI_SETDESKWALLPAPER, 0, ByVal BMPFile, SPIF_UPDATEINIFILE
End Sub
'=======================================================
*/
//SetPixelV SetPixel GetPixel
//Sleep
//GetPixelFormat
//SetPixelFormat PIXELFORMATDESCRIPTOR
//SetWindowPos
//ShellExecute
//SystemParametersInfo
//GetWindowsDirectory
//GetBitmapBits
//SetBitmapBits
void CGlobal::SetWallPaper()//PicBox As PictureBox)
{ //设置桌面图片
CString cs, cs1, fileName;
char temp[_MAX_PATH];
GetWindowsDirectory(temp, _MAX_PATH);
cs = temp;
cs1 = cs.Right(1);
int len=cs.GetLength();
if( !cs1.CompareNoCase("\\") )
cs = cs.Left(len-1);
fileName = cs + "\\HssNiuDunWallPaper.bmp";
//SavePicture PicBox.Image, fileName
;
//DoEvents
//Call ClearWallPaper
SetWallPaperA((char *&)fileName);
}
void CGlobal::ClearWallPaper()
{ //清除桌面图片
int temp;
temp = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL,
SPIF_UPDATEINIFILE|SPIF_SENDWININICHANGE);
//MsgBox temp
//AfxMessagegBox();
}
void CGlobal::SetWallPaperA(char* pBmpFile)
{ //设置桌面图片API调用
int temp;
temp = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pBmpFile,
SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
//MsgBox temp
//SystemParametersInfo SPI_SETDESKWALLPAPER, 0, ByVal BMPFile, SPIF_UPDATEINIFILE
}
/*
Option Explicit
'======================================================================
'控制参数的定义、基本操作函数 和 Min()、Max()函数
'======================================================================
'控制参数表
Public Const SeDataLen As Long = 200
Public SeData(-2 To SeDataLen, 0 To 19) As Double
' 23组参数,每组19个参数值
' SeData(0,i)组 为初始值
' SeData(-1,i)或SeData(-2,i) 为临时值
' SeData(i,0)=1标志该组有效
' PSeData“指向”控制参数数组,以决定上一幅或下一幅图像的参数在数组中的位置
Public PSeData As Long
'控制参数压入
Public Sub SeDataIN()
Dim i As Long
Dim j As Long
For i = SeDataLen - 2 To 0 Step -1
For j = 0 To 19
SeData(i + 1, j] = SeData(i, j)
Next j
Next i
SeData(1, 5] = 0
End Sub
'控制参数弹出
Public Sub SeDataOUT()
Dim i As Long
Dim j As Long
For i = 1 To SeDataLen - 1
For j = 0 To 19
SeData(i - 1, j] = SeData(i, j)
Next j
Next i
SeData(0, 5] = 0
End Sub
'最小值
Public Function Min(x0 As Single, x1 As Single) As Single
If x0 > x1 Then
Min = x1
Else
Min = x0
End If
End Function
'最大值
Public Function Max(x0 As Single, x1 As Single) As Single
If x0 < x1 Then
Max = x1
Else
Max = x0
End If
End Function
'=======================================================
*/
//控制参数表
//#define SEDATALEN 200
//#define SEDATANUM 20
//double SeData0[2][SEDATANUM];
// SeData0(0,i)或SeData(1,i) 为临时值
//double SeData[SEDATALEN][SEDATANUM];
// 23组参数,每组19个参数值
// SeData(0,i)组 为初始值
// SeData(i,0)=1标志该组有效
//' PSeData“指向”控制参数数组,以决定上一幅或下一幅图像的参数在数组中的位置
//Public PSeData As Long
//控制参数压入
void CGlobal::SeDataIN()
{
for(int i=SEDATALEN-2; i>=0; i--)
memcpy(&m_dSeData[i+1], &m_dSeData[i], SEDATANUM*sizeof(double));
m_dSeData[1][5] = 0;
}
//控制参数弹出
void CGlobal::SeDataOUT()
{
for(int i=1; i<SEDATALEN; i++)
memcpy(&m_dSeData[i-1], &m_dSeData[i], SEDATANUM*sizeof(double));
m_dSeData[0][5] = 0;
}
// __min();
// __max();
//======================================================================
//实现不同方程的牛顿迭代法 和 一些基本复变函数
//======================================================================
//+++++++++++实现不同方程的牛顿迭代法,并返回方程的各种基本性质+++++++++++++
int CGlobal::MMi(double x0, double y0, int nN, int M, int nM,
double* Hx, double* Hy, double* dL1, double* dL2,
double* dL3, double* dL4)
//调用时MMi(x0, y0, Int(SeData(0, 13)), M, nM, dX, dY, dL1, dL2, dL3, dL4)
// 牛顿迭代法解方程原理:
// 不失一般性设方程为: f(Z] = 0 (关于复数Z的函数)
// 对 f(Z) 求导函数得: f//(Z)
// 对任意复数Z0可以有Z1 , Z1 = Z0 - f(Z0)/f//(Z0)
// 同样,对复数Z1可以有Z2 , Z2 = Z1 - f(Z1)/f//(Z1)
// …… …… ……
// 则,有迭代式:Z(n+1)=Z(n)-f(Z(n))/f//(Z(n))
// 对于选定的起始点,迭代大多都会收敛于方程f(z] = 0 的某个根,
// 这就是牛顿迭代法解方程的基本方式;
// 但也可能存在许多点,使迭代根本就不会收敛,
// 甚至可能出现混沌的状态。
//nN 方程序号(>=1, 整数)
// M 迭代次数
//nM 最大迭代次数
//dX 第一次迭代x轴的变化率
//dY 第一次迭代y轴的变化率
//dL1 第一次迭代移动距离
//dL2 第nM次迭代移动距离
//dL3 第nM次迭代距离(0,0)点的距离
//dL4 迭代得到解以后距离解的大概距离
{
int i, k=0;
double x1, x2, y1, y2, m0;
double SeTa1, P1, A;
// double SeTa2, P2, B;
double temp0, temp1, temp2, temp3=0, temp4=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -