// TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); if (mMessageSend == "") { AfxMessageBox(_T("发送信息不能为空。")); return; } if (mSock.Send((LPCTSTR)mMessageSend, mMessageSend.GetLength()*sizeof(TCHAR)) == SOCKET_ERROR) { AfxMessageBox(_T("发送信息失败,请重新发送。")); return; } CString strTemp = _T("发送:") + mMessageSend + _T("\r\n"); mMessageSend.Empty(); UpdateData(FALSE);//必须的。否则界面内容不更新改变 int nLength = mEditMsgRcd.SendMessage(WM_GETTEXTLENGTH);//得到编辑框中文本长度 mEditMsgRcd.SetSel(nLength, nLength);//设置文本替换区域 mEditMsgRcd.ReplaceSel(strTemp);//替换
时间: 2024-04-15 07:25:25 浏览: 83
上面的代码片段是一个控件通知处理程序,根据您的描述,它涉及到发送消息和更新编辑框内容。在这段代码中,并没有涉及到将上位机输入的INT数据转换为PLC1200能够接收的数据类型。如果您需要将INT数据转换为其他数据类型后发送给PLC1200,请告诉我您希望将INT数据转换为哪种数据类型,以及PLC1200所支持的数据类型。这样我才能提供更具体的帮助。
相关问题
用C++,创建MFC,用prewitt算子锐化,仿照下面代码void CMyImageView::OnSobelsuanzi() { // TODO: 在此添加命令处理程序代码 CMyImageDoc* pDoc = GetDocument();//获取文档指针 ASSERT_VALID(pDoc); Prewittsuanzi dlginputyuzhi;//定义阈值对话框类对象 dlginputyuzhi.DoModal();//弹出对话框 UpdateData(TRUE); if (pDoc->m_pDib == NULL) { AfxMessageBox("Error!"); return; } int mcols = pDoc->m_pDib->m_nCols; int mrows = pDoc->m_pDib->m_nRows; unsigned char* m_pData = NULL; m_pData = pDoc->m_pDib->pImgData; unsigned char* m_pDataOldPos = m_pData; unsigned char* a; int* b = NULL; int irows, jcols; int max = 0; int min = 255; vector<int>v; for (irows = 0; irows < mrows; irows++) { for (jcols = 0; jcols < mcols; jcols++) { int j = 0; int p = 0, q = 0; m_pData += irows * mcols + jcols; j += irows * mcols + jcols; if (j > mcols && (j + 1) % mcols != 0 && j < (mrows * (mcols - 1))) { p = (m_pData + mcols+1) + 2( * (m_pData + mcols )) + (m_pData + mcols - 1) - 2( * (m_pData - mcols)) - (m_pData - mcols - 1) - (m_pData - mcols + 1); q = 2( * (m_pData + 1)) + (m_pData + mcols + 1) + (m_pData - mcols + 1) - 2( * (m_pData - 1)) - (m_pData + mcols - 1) - (m_pData - mcols - 1); p = abs(p); q = abs(q); if (p > dlginputyuzhi.xyuzhi && q > dlginputyuzhi.yyuzhi) { v.push_back(0); } else { v.push_back(255); } } m_pData = m_pDataOldPos; } } int aq = 0; for (irows = 0; irows < mrows; irows++) { for (jcols = 0; jcols < mcols; jcols++) { int j = 0; int p = 0, q = 0; m_pData += irows * mcols + jcols; j += irows * mcols + jcols; if (j > mcols && (j + 1) % mcols != 0 && j < (mrows * (mcols - 1))) { m_pData = v[aq]; aq++; } m_pData = m_pDataOldPos; } } pDoc->UpdateAllViews(NULL); },给出相应程序
好的,以下是用C++创建MFC应用程序,用prewitt算子锐化的示例代码,供您参考:
首先,您需要创建一个MFC应用程序,选择MFC应用程序向导,并按照向导提示进行设置和创建。创建完成后,在资源视图中添加一个对话框资源,用于显示阈值对话框。
然后,在对话框类的.h文件中添加以下代码,用于声明事件处理函数:
```
afx_msg void OnPrewittSuanzi();
```
在.cpp文件中添加以下代码,用于实现事件处理函数:
```
void CMyImageView::OnPrewittSuanzi()
{
CMyImageDoc* pDoc = GetDocument(); // 获取文档指针
ASSERT_VALID(pDoc);
CPrewittDlg dlgInputYuzhi; // 定义阈值对话框类对象
dlgInputYuzhi.DoModal(); // 弹出对话框
UpdateData(TRUE);
if (pDoc->m_pDib == NULL) {
AfxMessageBox("Error!");
return;
}
int mCols = pDoc->m_pDib->m_nCols;
int mRows = pDoc->m_pDib->m_nRows;
unsigned char* m_pData = NULL;
m_pData = pDoc->m_pDib->pImgData;
unsigned char* m_pDataOldPos = m_pData;
unsigned char* a;
int* b = NULL;
int iRows, jCols;
int max = 0;
int min = 255;
vector<int> v;
for (iRows = 0; iRows < mRows; iRows++) {
for (jCols = 0; jCols < mCols; jCols++) {
int j = 0;
int p = 0, q = 0;
m_pData += iRows * mCols + jCols;
j += iRows * mCols + jCols;
if (j > mCols && (j + 1) % mCols != 0 && j < (mRows * (mCols - 1))) {
p = (m_pData + mCols + 1) + 2 * (*(m_pData + mCols)) + (m_pData + mCols - 1) - 2 * (*(m_pData - mCols)) - (m_pData - mCols - 1) - (m_pData - mCols + 1);
q = 2 * (*(m_pData + 1)) + (m_pData + mCols + 1) + (m_pData - mCols + 1) - 2 * (*(m_pData - 1)) - (m_pData + mCols - 1) - (m_pData - mCols - 1);
p = abs(p);
q = abs(q);
if (p > dlgInputYuzhi.xyuzhi && q > dlgInputYuzhi.yyuzhi) {
v.push_back(0);
}
else {
v.push_back(255);
}
}
m_pData = m_pDataOldPos;
}
}
int aq = 0;
for (iRows = 0; iRows < mRows; iRows++) {
for (jCols = 0; jCols < mCols; jCols++) {
int j = 0;
int p = 0, q = 0;
m_pData += iRows * mCols + jCols;
j += iRows * mCols + jCols;
if (j > mCols && (j + 1) % mCols != 0 && j < (mRows * (mCols - 1))) {
m_pData = v[aq];
aq++;
}
m_pData = m_pDataOldPos;
}
}
pDoc->UpdateAllViews(NULL);
}
```
其中,CPrewittDlg是阈值对话框类,xyuzhi和yyuzhi是阈值控件的值。
最后,您需要在视图类的.h文件中添加以下代码,用于声明事件处理函数:
```
afx_msg void OnPrewittSuanzi();
```
在.cpp文件中添加以下代码,用于响应事件:
```
BEGIN_MESSAGE_MAP(CMyImageView, CScrollView)
// 其他消息映射
ON_COMMAND(ID_PREWITT_SUANZI, &CMyImageView::OnPrewittSuanzi)
END_MESSAGE_MAP()
```
在资源视图中,您需要添加一个菜单项,用于触发prewitt算子的事件处理函数,代码如下:
```
<MenuItem
Id="ID_PREWITT_SUANZI"
Type="Button"
Text="Prewitt算子"
Tooltip="执行Prewitt算子锐化"
BitmapResourceId="IDB_PREWITT"
/>
```
至此,您就可以编译和运行程序,并进行测试。如果有问题,可以通过调试来查找和解决。
希望这些信息能对您有所帮助。
mfc中有一窗口,一文本文件中存有姓名,账号,密码,身份证号,余额,各个信息用逗号隔开。输入修改的密码,然后点击修改密码按钮,将重新输入的密码替换保存到文本文件中,点击查询按钮后能在对应框中显示出新密码。C++具体代码
以下是一个简单的 MFC 窗口程序,用于实现修改密码和查询密码的功能。该程序将文本文件中的信息读入一个 vector 中,在用户修改密码时更新相应信息,最后将更新后的信息写回文本文件中。
```cpp
#include "stdafx.h"
#include "MFCApplication1.h"
#include "MFCApplication1Dlg.h"
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 对话框
class CMFCApplication1Dlg : public CDialogEx
{
public:
CMFCApplication1Dlg(CWnd* pParent = nullptr); // 标准构造函数
vector<vector<string>> data; // 存储文本文件中的信息
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MFCAPPLICATION1_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CString m_name;
CString m_account;
CString m_password;
CString m_id;
CString m_balance;
CString m_newPassword;
afx_msg void OnBnClickedButtonQuery();
afx_msg void OnBnClickedButtonModify();
};
CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
, m_name(_T(""))
, m_account(_T(""))
, m_password(_T(""))
, m_id(_T(""))
, m_balance(_T(""))
, m_newPassword(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_NAME, m_name);
DDX_Text(pDX, IDC_EDIT_ACCOUNT, m_account);
DDX_Text(pDX, IDC_EDIT_PASSWORD, m_password);
DDX_Text(pDX, IDC_EDIT_ID, m_id);
DDX_Text(pDX, IDC_EDIT_BALANCE, m_balance);
DDX_Text(pDX, IDC_EDIT_NEWPASSWORD, m_newPassword);
}
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_QUERY, &CMFCApplication1Dlg::OnBnClickedButtonQuery)
ON_BN_CLICKED(IDC_BUTTON_MODIFY, &CMFCApplication1Dlg::OnBnClickedButtonModify)
END_MESSAGE_MAP()
// CMFCApplication1Dlg 消息处理程序
BOOL CMFCApplication1Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将图标设置为应用程序默认大小的图标。
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
ifstream fin("data.txt");
if (fin.is_open()) {
string line;
while (getline(fin, line)) {
vector<string> row;
istringstream iss(line);
string item;
while (getline(iss, item, ',')) {
row.push_back(item);
}
data.push_back(row);
}
fin.close();
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CMFCApplication1Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CMFCApplication1Dlg::OnBnClickedButtonQuery()
{
// 查询密码
CString account;
GetDlgItemText(IDC_EDIT_ACCOUNT, account);
for (auto& row : data) {
if (row[1] == CT2A(account)) {
m_name = CA2T(row[0].c_str());
m_account = CA2T(row[1].c_str());
m_password = CA2T(row[2].c_str());
m_id = CA2T(row[3].c_str());
m_balance = CA2T(row[4].c_str());
UpdateData(FALSE);
return;
}
}
AfxMessageBox(_T("账号不存在!"));
}
void CMFCApplication1Dlg::OnBnClickedButtonModify()
{
// 修改密码
CString account, newPassword;
GetDlgItemText(IDC_EDIT_ACCOUNT, account);
GetDlgItemText(IDC_EDIT_NEWPASSWORD, newPassword);
for (auto& row : data) {
if (row[1] == CT2A(account)) {
row[2] = CT2A(newPassword);
m_password = m_newPassword;
UpdateData(FALSE);
ofstream fout("data.txt");
for (auto& r : data) {
for (auto& item : r) {
fout << item << ",";
}
fout << endl;
}
fout.close();
return;
}
}
AfxMessageBox(_T("账号不存在!"));
}
```
需要注意的是,本程序中的文本文件 `data.txt` 中每行的信息顺序应与代码中存储的顺序相同,即姓名、账号、密码、身份证号、余额,每个信息之间用逗号隔开。
阅读全文