我想为 ToolStrip 做一个漂亮的渲染,但是所有的手册和指南都是用 C# 编写的。
这是一个示例https://www.codeproject.com/Articles/29497/Custom-Rendering-for-the-ToolStrip-MenuStrip-and-S
我尝试移植这段代码,但效果不佳,因为我对 C# 不是很熟悉。
如何也只能在 C++/CLI 中做到这一点?
我想为 ToolStrip 做一个漂亮的渲染,但是所有的手册和指南都是用 C# 编写的。
这是一个示例https://www.codeproject.com/Articles/29497/Custom-Rendering-for-the-ToolStrip-MenuStrip-and-S
我尝试移植这段代码,但效果不佳,因为我对 C# 不是很熟悉。
如何也只能在 C++/CLI 中做到这一点?
我不知道怎么做,请告诉我怎么做。我知道在 js 中有一个命令eval()
可以解决所有问题。在C++/CLI中怎么样?我不需要 Lua,只需要C++/CLI。
this->InputTextBox->Text
我想从 this->InputTextBox->Text 中取出一个字符串并将其转换为字符串类型:
String^ Matematic = gcnew String(InputTextBox->Text);
之后我需要把它变成int类型,怎么做?我不知道。然后解决一个数学表达式或示例并执行以下操作:
this->InputTextBox->Text = result;
PS(如果它像Js一样在C++ 中会很酷)。eval()
我的应用程序需要启动进程以便以后通过 API 访问它们。但是,Windows 10 要求进程启动方法的管理员权限。否则,程序会出错。如何在不使用管理员权限的情况下应用进程启动方法?
代码的原始版本(带有缩写):
//Функция копирования файлов в папку пользователя
int int_Copy_files(All_box_parametres Box_parametres)
{
// Переменные для работы с объектами SW
SldWorks^ swApp = nullptr;
IPartDoc^ Part;
bool boolstatus;
int longstatus;
int longwarnings;
int swErrors;
int swWarnings;
//Флаг наличия предварительно запущенного SW
bool bool_SW_process_flag;
//Имя запущенного процесса SW
TCHAR szExe[] = L"SldWorks.exe";
//Если SW не запущен, то запускаем
System::Object^ processSW;
if (!IsProcessPresent((wchar_t*)&szExe))
{
processSW = System::Activator::CreateInstance(System::Type::GetTypeFromCLSID(Guid::Parse("{0D825E02-9000-4D82-B4AB-D6BDC2872797}")));
swApp = (SldWorks^)processSW;
swApp->Visible = true;
bool_SW_process_flag = false;
}
return 0;
}
我也尝试了另一种方法,但它也要求管理员权限:
Process^ myProcess = gcnew Process();
myProcess->StartInfo->UseShellExecute = false;
myProcess->StartInfo->FileName = "C:\\Program Files\\SolidWorks Corp\\SolidWorks\\SLDWORKS.exe";
myProcess->StartInfo->CreateNoWindow = true;
myProcess->Start();
当我选择一个单元格时,我希望它几乎不易察觉(就像在 excel 中一样)。但是通过我的实现,出于某种原因,您可以看到单元格是如何按顺序绘制的,如何以一种快速的方式修复代码?多亏了while循环,我自己才稍微加快了速度。
我确定有更简单的方法
void MyForm::dataGridView1_SelectionChanged(Object^ sender, EventArgs^ e)
{
//Выделение активной ячейки по столбцу и строке
CurrColNew = dataGridView1->CurrentCell->ColumnIndex;
CurrRowNew = dataGridView1->CurrentCell->RowIndex;
short col = CurrColNew;
short row = CurrRowNew;
short colold = CurrColOld;
short rowold = CurrRowOld;
Color& rowheadbackcolornew = dataGridView1->Columns[CurrColNew]->HeaderCell->Style->BackColor;
int stp = 65;
if (CurrColOld != CurrColNew || CurrRowOld != CurrRowNew)
{
if (rowheadbackcolornew == Color::FromArgb(127, 118, 121))
rowheadbackcolornew = Color::FromArgb(127, 118 + stp, 121);
else if (rowheadbackcolornew == Color::FromArgb(0, 190, 20))
rowheadbackcolornew = Color::FromArgb(0, 190 + stp, 20);
else if (rowheadbackcolornew == Color::FromArgb(0, 162, 254))
rowheadbackcolornew = Color::FromArgb(0, 162 + stp, 254);
else if (rowheadbackcolornew == Color::FromArgb(190, 0, 0))
rowheadbackcolornew = Color::FromArgb(190, 0 + stp, 0);
else if (rowheadbackcolornew == Color::FromArgb(255, 255, 255))
rowheadbackcolornew = Color::FromArgb(255, 245, 194);
dataGridView1->Columns[CurrColNew]->HeaderCell->Style->BackColor = rowheadbackcolornew;
short i = 0;
while (i < colold)
{
if (getColorCell(i, rowold) == Color::FromArgb(255, 245, 194))
SetColor(i, rowold, Color::FromArgb(255, 255, 255));
i++;
}
short j = 0;
while (j < rowold)
{
if (getColorCell(colold, j) == Color::FromArgb(255, 245, 194))
SetColor(colold, j, Color::FromArgb(255, 255, 255));
j++;
}
short _i = 0;
while (_i < col)
{
if (getColorCell(_i, row) == Color::FromArgb(255, 255, 255))
SetColor(_i, row, Color::FromArgb(255, 245, 194));
_i++;
}
short _j = 0;
while (_j < row)
{
if (getColorCell(col, _j) == Color::FromArgb(255, 255, 255))
SetColor(col, _j, Color::FromArgb(255, 245, 194));
_j++;
}
}
Color& rowheadbackcolorold = dataGridView1->Columns[CurrColOld]->HeaderCell->Style->BackColor;
if (rowheadbackcolorold == Color::FromArgb(127, 118 + stp, 121))
rowheadbackcolorold = Color::FromArgb(127, 118, 121);
else if (rowheadbackcolorold == Color::FromArgb(0, 190 + stp, 20))
rowheadbackcolorold = Color::FromArgb(0, 190, 20);
else if (rowheadbackcolorold == Color::FromArgb(0, 162 + stp, 254))
rowheadbackcolorold = Color::FromArgb(0, 162, 254);
else if (rowheadbackcolorold == Color::FromArgb(190, 0 + stp, 0))
rowheadbackcolorold = Color::FromArgb(190, 0, 0);
else
rowheadbackcolorold = Color::FromArgb(255, 255, 255);
if (CurrColOld == CurrColNew)
dataGridView1->Columns[CurrColOld]->HeaderCell->Style->BackColor = rowheadbackcolornew;
else
dataGridView1->Columns[CurrColOld]->HeaderCell->Style->BackColor = rowheadbackcolorold;
CurrRowOld = CurrRowNew;
CurrColOld = CurrColNew;
}
自定义函数代码:
Color MyForm::getColorCell(int i, int j)
{
return dataGridView1[i, j]->Style->BackColor;
}
void MyForm::SetColor(int i, int j, const Color& newColor)
{
dataGridView1[i, j]->Style->BackColor = newColor;
}
面对需要通过c ++从这台计算机删除/隐藏文件夹视频/照片/等。这是通过编辑注册表来完成的。RegCreateKeyEx() 等由于我使用 cli 引发错误,Win32::Registry 有效,但是当我尝试使用 LocalMachine 时出现错误,因为它找不到所需的部分,system(regedit registry file) 和 process->Start(regedit, registry file) 也不更改注册表。Visual Studio 代表管理员运行,管理员权限也在项目清单中配置。
我不知道下一步该做什么。