MFC 實現richedit右鍵選單的複製貼上功能
阿新 • • 發佈:2019-01-23
//滑鼠右鍵響應函式
void CMSR009BTDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
CMenu popMenu;
CRect rect1,rect2,rect3;//定義矩形區域
int k=0;
if(MyDevFound)
{
TrackSelect1 = NoSelect;//編輯框右鍵選擇
TrackSelect2 = NoSelect;//編輯框右鍵選擇
TrackSelect3 = NoSelect;//編輯框右鍵選擇
GetDlgItem(IDC_EDIT_Track1)->GetWindowRect(&rect1);//獲取控制元件區域的矩形
GetDlgItem(IDC_EDIT_Track2)->GetWindowRect(&rect2);//獲取控制元件區域的矩形
GetDlgItem(IDC_EDIT_Track3)->GetWindowRect(&rect3);//獲取控制元件區域的矩形
if(rect1.PtInRect(point))
{
TrackSelect1 = EditSelect;
}
else if(rect2.PtInRect(point))
{
TrackSelect2 = EditSelect;
}
else if(rect3.PtInRect(point))
{
TrackSelect3 = EditSelect;
}
if((TrackSelect1 == EditSelect)||(TrackSelect2 == EditSelect)||(TrackSelect3 == EditSelect))
{
CMenu *pPopup;
popMenu.LoadMenu(IDR_MENU1); //載入選單
pPopup=popMenu.GetSubMenu(0); //獲得子選單指標
pPopup->EnableMenuItem(ID_Copy,MF_BYCOMMAND|MF_ENABLED); //允許選單項使用
pPopup->EnableMenuItem(ID_Paste,MF_BYCOMMAND|MF_ENABLED); //允許選單項使用
pPopup->EnableMenuItem(ID_Select,MF_BYCOMMAND|MF_ENABLED); //允許選單項使用
pPopup->EnableMenuItem(ID_Deselect,MF_BYCOMMAND|MF_ENABLED); //允許選單項使用
//pPopup->EnableMenuItem(ID_3,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); //不允許選單項使用
//ClientToScreen(&point); //將客戶區座標轉換成螢幕座標
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); //顯示彈出選單,引數依次為(滑鼠在選單左邊|跟蹤右鍵,x,y,this)
pPopup->Detach();
popMenu.DestroyMenu();
}
}
}
//複製編輯框資料
void CMSR009BTDlg::OnCopyData()
{
char cData[255] = {0};
intMaxsize = 255;
int track1len,track2len,track3len;
if(TrackSelect1 == EditSelect)
{
//滑鼠拖選
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->GetSel(WrtieTrack1.Start, WrtieTrack1.End);
memset(cData,0,sizeof(cData));
track1len = m_ctrlTrack1.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack1.End > track1len)
{
WrtieTrack1.End = track1len;
}
GetDlgItem(IDC_EDIT_Track1)->GetWindowText(WrtieTrack1.Allstring);
WrtieTrack1.Editdtring = WrtieTrack1.Allstring.Left(WrtieTrack1.End).Right(WrtieTrack1.End - WrtieTrack1.Start);
}
else if(TrackSelect2 == EditSelect)
{
//滑鼠拖選
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->GetSel(WrtieTrack2.Start, WrtieTrack2.End);
memset(cData,0,sizeof(cData));
track2len = m_ctrlTrack2.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack2.End > track2len)
{
WrtieTrack2.End = track2len;
}
GetDlgItem(IDC_EDIT_Track2)->GetWindowText(WrtieTrack2.Allstring);
WrtieTrack2.Editdtring = WrtieTrack2.Allstring.Left(WrtieTrack2.End).Right(WrtieTrack2.End - WrtieTrack2.Start);
}
else if(TrackSelect3 == EditSelect)
{
//滑鼠拖選
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->GetSel(WrtieTrack3.Start, WrtieTrack3.End);
memset(cData,0,sizeof(cData));
track3len = m_ctrlTrack3.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack3.End > track3len)
{
WrtieTrack3.End = track3len;
}
GetDlgItem(IDC_EDIT_Track3)->GetWindowText(WrtieTrack3.Allstring);
WrtieTrack3.Editdtring = WrtieTrack3.Allstring.Left(WrtieTrack3.End).Right(WrtieTrack3.End - WrtieTrack3.Start);
}
//文字內容儲存在source變數中,複製到貼上板中
if(OpenClipboard())
{
HGLOBAL clipbuffer;
char * buffer;
EmptyClipboard();
if(TrackSelect1 == EditSelect)
{
clipbuffer = GlobalAlloc(GMEM_DDESHARE, WrtieTrack1.Editdtring.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer, LPCSTR(WrtieTrack1.Editdtring));
}
else if(TrackSelect2 == EditSelect)
{
clipbuffer = GlobalAlloc(GMEM_DDESHARE, WrtieTrack2.Editdtring.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer, LPCSTR(WrtieTrack2.Editdtring));
}
else if(TrackSelect3 == EditSelect)
{
clipbuffer = GlobalAlloc(GMEM_DDESHARE, WrtieTrack3.Editdtring.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer, LPCSTR(WrtieTrack3.Editdtring));
}
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}
}
//貼上資料到編輯框
void CMSR009BTDlg::OnPasteData()
{
int track1len,track2len,track3len;
char cData[255] = {0};
intMaxsize = 255;
char * buffer = NULL;
//開啟剪貼簿
CString fromClipboard;
if(OpenClipboard())
{
HANDLE hData = GetClipboardData(CF_TEXT);
char * buffer = (char*)GlobalLock(hData);
fromClipboard = buffer;
GlobalUnlock(hData);
CloseClipboard();
}
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
if(TrackSelect1 == EditSelect)
{
m_ctrlTrack1.Paste();
if(m_brush1 != NULL)
{
m_brush1 = NULL;
track1len = m_ctrlTrack1.GetWindowText((char*)cData,Maxsize);
m_ctrlTrack1.SetSel(0, track1len); //設定處理區域
m_ctrlTrack1.SetSelectionCharFormat(cf);
m_ctrlTrack1.SetSel(track1len,track1len); //設定處理區域
}
}
else if(TrackSelect2 == EditSelect)
{
m_ctrlTrack2.Paste();
if(m_brush2 != NULL)
{
m_brush2 = NULL;
track2len = m_ctrlTrack2.GetWindowText((char*)cData,Maxsize);
m_ctrlTrack2.SetSel(0, track2len); //設定處理區域
m_ctrlTrack2.SetSelectionCharFormat(cf);
m_ctrlTrack2.SetSel(track2len,track2len); //設定處理區域
}
}
else if(TrackSelect3 == EditSelect)
{
m_ctrlTrack3.Paste();
if(m_brush3 != NULL)
{
m_brush3 = NULL;
track3len = m_ctrlTrack3.GetWindowText((char*)cData,Maxsize);
m_ctrlTrack3.SetSel(0, track3len); //設定處理區域
m_ctrlTrack3.SetSelectionCharFormat(cf);
m_ctrlTrack3.SetSel(track3len,track3len); //設定處理區域
}
}
}
//選擇資料
void CMSR009BTDlg::OnSelectData()
{
char cData[255] = {0};
intMaxsize = 255;
int track1len,track2len,track3len;
int i,j;
if(TrackSelect1 == EditSelect)
{
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->GetSel(WrtieTrack1.Start, WrtieTrack1.End);
memset(cData,0,sizeof(cData));
track1len = m_ctrlTrack1.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack1.End > track1len)
{
WrtieTrack1.End = track1len;
}
GetDlgItem(IDC_EDIT_Track1)->GetWindowText(WrtieTrack1.Allstring);
WrtieTrack1.Editdtring = WrtieTrack1.Allstring.Left(WrtieTrack1.End).Right(WrtieTrack1.End - WrtieTrack1.Start);
//----------------------------------//
if(WrtieTrack1.Start != WrtieTrack1.End)
{
j = WrtieTrack1.End - WrtieTrack1.Start;
if(j > 9)
{
SetDlgItemText(IDC_MessageTxet,WrtieTrack1.Editdtring);
MessageBox("(Message) The selected number of track1 can not be more than 9 digits","Notion",MB_OK);
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
return;
}
for(i=0;i<j;i++)
{
if((WrtieTrack1.Editdtring[i] < '0') || (WrtieTrack1.Editdtring[i] > '9'))
{
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
SetDlgItemText(IDC_MessageTxet,WrtieTrack1.Editdtring);
MessageBox("(Message) The selected data of track1 can only choose digits!","Notion",MB_OK);
return;
}
}
if (m_brush1)
DeleteObject(m_brush1);
m_brush1 = CreateSolidBrush(RGB(200, 200, 255)); // 根據需要設定
GetDlgItem(IDC_EDIT_Track1)->SetWindowText(WrtieTrack1.Allstring);
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(WrtieTrack1.Start, WrtieTrack1.End);
m_ctrlTrack1.SetFocus();
Invalidate();
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.crTextColor = RGB(255, 0, 0); //文字顏色
m_ctrlTrack1.SetSel(WrtieTrack1.Start, WrtieTrack1.End); //設定處理區域
m_ctrlTrack1.SetSelectionCharFormat(cf);
m_ctrlTrack1.EnableWindow(false);
}
}
else if(TrackSelect2 == EditSelect)
{
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->GetSel(WrtieTrack2.Start, WrtieTrack2.End);
memset(cData,0,sizeof(cData));
track2len = m_ctrlTrack2.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack2.End > track2len)
{
WrtieTrack2.End = track2len;
}
GetDlgItem(IDC_EDIT_Track2)->GetWindowText(WrtieTrack2.Allstring);
WrtieTrack2.Editdtring = WrtieTrack2.Allstring.Left(WrtieTrack2.End).Right(WrtieTrack2.End - WrtieTrack2.Start);
//--------------------------//
if(WrtieTrack2.Start != WrtieTrack2.End)
{
j = WrtieTrack2.End - WrtieTrack2.Start;
if(j > 9)
{
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
SetDlgItemText(IDC_MessageTxet,WrtieTrack2.Editdtring);
MessageBox("(Message) The selected number of track2 can not be more than 9 digits","Notion",MB_OK);
return;
}
for(i=0;i<j;i++)
{
if((WrtieTrack2.Editdtring[i] < '0') || (WrtieTrack2.Editdtring[i] > '9'))
{
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
SetDlgItemText(IDC_MessageTxet,WrtieTrack2.Editdtring);
MessageBox("(Message) The selected data of track2 can only choose digits!","Notion",MB_OK);
return;
}
}
if (m_brush2)
DeleteObject(m_brush2);
m_brush2 = CreateSolidBrush(RGB(200, 200, 255)); // 根據需要設定
GetDlgItem(IDC_EDIT_Track2)->SetWindowText(WrtieTrack2.Allstring);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(WrtieTrack2.Start, WrtieTrack2.End);
m_ctrlTrack2.SetFocus();
Invalidate();
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.crTextColor = RGB(255, 0, 0); //文字顏色
m_ctrlTrack2.SetSel(WrtieTrack2.Start, WrtieTrack2.End); //設定處理區域
m_ctrlTrack2.SetSelectionCharFormat(cf);
m_ctrlTrack2.EnableWindow(false);
}
}
else if(TrackSelect3 == EditSelect)
{
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->GetSel(WrtieTrack3.Start, WrtieTrack3.End);
memset(cData,0,sizeof(cData));
track3len = m_ctrlTrack3.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack3.End > track3len)
{
WrtieTrack3.End = track3len;
}
GetDlgItem(IDC_EDIT_Track3)->GetWindowText(WrtieTrack3.Allstring);
WrtieTrack3.Editdtring = WrtieTrack3.Allstring.Left(WrtieTrack3.End).Right(WrtieTrack3.End - WrtieTrack3.Start);
//----------------------//
if(WrtieTrack3.Start != WrtieTrack3.End)
{
j = WrtieTrack3.End - WrtieTrack3.Start;
if(j > 9)
{
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
SetDlgItemText(IDC_MessageTxet,WrtieTrack3.Editdtring);
MessageBox("(Message) The selected number of track3 can not be more than 9 digits","Notion",MB_OK);
return;
}
for(i=0;i<j;i++)
{
if((WrtieTrack3.Editdtring[i] < '0') || (WrtieTrack3.Editdtring[i] > '9'))
{
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
SetDlgItemText(IDC_MessageTxet,WrtieTrack3.Editdtring);
MessageBox("(Message) The selected data of track3 can only choose digits!","Notion",MB_OK);
return;
}
}
if (m_brush3)
DeleteObject(m_brush3);
m_brush3 = CreateSolidBrush(RGB(200, 200, 255)); // 根據需要設定
GetDlgItem(IDC_EDIT_Track3)->SetWindowText(WrtieTrack3.Allstring);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(WrtieTrack3.Start, WrtieTrack3.End);
m_ctrlTrack3.SetFocus();
Invalidate();
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.crTextColor = RGB(255, 0, 0); //文字顏色
m_ctrlTrack3.SetSel(WrtieTrack3.Start, WrtieTrack3.End); //設定處理區域
m_ctrlTrack3.SetSelectionCharFormat(cf);
m_ctrlTrack3.EnableWindow(false);
}
}
if((WrtieTrack1.Start == WrtieTrack1.End) && (WrtieTrack2.Start == WrtieTrack2.End) && (WrtieTrack3.Start == WrtieTrack3.End))
{
MessageBox("Did not select any data!","Notion",MB_OK);
}
}
void CMSR009BTDlg::OnDeselectData()
{
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
if(TrackSelect1 == EditSelect)
{
m_ctrlTrack1.EnableWindow(true);
WrtieTrack1.Start = 0;
WrtieTrack1.End = 0;
WrtieTrack1.Editdtring = "";
WrtieTrack1.Allstring = "";
m_brush1 = NULL;
m_ctrlTrack1.SetSel(0, 200); //設定處理區域
m_ctrlTrack1.SetSelectionCharFormat(cf);
m_ctrlTrack1.SetSel(0,0); //設定處理區域
}
else if(TrackSelect2 == EditSelect)
{
m_ctrlTrack2.EnableWindow(true);
WrtieTrack2.Start = 0;
WrtieTrack2.End = 0;
WrtieTrack2.Editdtring = "";
WrtieTrack2.Allstring = "";
m_brush2 = NULL;
m_ctrlTrack2.SetSel(0, 200); //設定處理區域
m_ctrlTrack2.SetSelectionCharFormat(cf);
m_ctrlTrack2.SetSel(0,0); //設定處理區域
}
else if(TrackSelect3 == EditSelect)
{
m_ctrlTrack3.EnableWindow(true);
WrtieTrack3.Start = 0;
WrtieTrack3.End = 0;
WrtieTrack3.Editdtring = "";
WrtieTrack3.Allstring = "";
m_brush3 = NULL;
m_ctrlTrack3.SetSel(0, 200); //設定處理區域
m_ctrlTrack3.SetSelectionCharFormat(cf);
m_ctrlTrack3.SetSel(0,0); //設定處理區域
}
}
void CMSR009BTDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
CMenu popMenu;
CRect rect1,rect2,rect3;//定義矩形區域
int k=0;
if(MyDevFound)
{
TrackSelect1 = NoSelect;//編輯框右鍵選擇
TrackSelect2 = NoSelect;//編輯框右鍵選擇
TrackSelect3 = NoSelect;//編輯框右鍵選擇
GetDlgItem(IDC_EDIT_Track1)->GetWindowRect(&rect1);//獲取控制元件區域的矩形
GetDlgItem(IDC_EDIT_Track2)->GetWindowRect(&rect2);//獲取控制元件區域的矩形
GetDlgItem(IDC_EDIT_Track3)->GetWindowRect(&rect3);//獲取控制元件區域的矩形
if(rect1.PtInRect(point))
{
TrackSelect1 = EditSelect;
}
else if(rect2.PtInRect(point))
{
TrackSelect2 = EditSelect;
}
else if(rect3.PtInRect(point))
{
TrackSelect3 = EditSelect;
}
if((TrackSelect1 == EditSelect)||(TrackSelect2 == EditSelect)||(TrackSelect3 == EditSelect))
{
CMenu *pPopup;
popMenu.LoadMenu(IDR_MENU1); //載入選單
pPopup=popMenu.GetSubMenu(0); //獲得子選單指標
pPopup->EnableMenuItem(ID_Copy,MF_BYCOMMAND|MF_ENABLED); //允許選單項使用
pPopup->EnableMenuItem(ID_Paste,MF_BYCOMMAND|MF_ENABLED); //允許選單項使用
pPopup->EnableMenuItem(ID_Select,MF_BYCOMMAND|MF_ENABLED); //允許選單項使用
pPopup->EnableMenuItem(ID_Deselect,MF_BYCOMMAND|MF_ENABLED); //允許選單項使用
//pPopup->EnableMenuItem(ID_3,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); //不允許選單項使用
//ClientToScreen(&point); //將客戶區座標轉換成螢幕座標
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); //顯示彈出選單,引數依次為(滑鼠在選單左邊|跟蹤右鍵,x,y,this)
pPopup->Detach();
popMenu.DestroyMenu();
}
}
}
//複製編輯框資料
void CMSR009BTDlg::OnCopyData()
{
char cData[255] = {0};
intMaxsize = 255;
int track1len,track2len,track3len;
if(TrackSelect1 == EditSelect)
{
//滑鼠拖選
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->GetSel(WrtieTrack1.Start, WrtieTrack1.End);
memset(cData,0,sizeof(cData));
track1len = m_ctrlTrack1.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack1.End > track1len)
{
WrtieTrack1.End = track1len;
}
GetDlgItem(IDC_EDIT_Track1)->GetWindowText(WrtieTrack1.Allstring);
WrtieTrack1.Editdtring = WrtieTrack1.Allstring.Left(WrtieTrack1.End).Right(WrtieTrack1.End - WrtieTrack1.Start);
}
else if(TrackSelect2 == EditSelect)
{
//滑鼠拖選
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->GetSel(WrtieTrack2.Start, WrtieTrack2.End);
memset(cData,0,sizeof(cData));
track2len = m_ctrlTrack2.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack2.End > track2len)
{
WrtieTrack2.End = track2len;
}
GetDlgItem(IDC_EDIT_Track2)->GetWindowText(WrtieTrack2.Allstring);
WrtieTrack2.Editdtring = WrtieTrack2.Allstring.Left(WrtieTrack2.End).Right(WrtieTrack2.End - WrtieTrack2.Start);
}
else if(TrackSelect3 == EditSelect)
{
//滑鼠拖選
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->GetSel(WrtieTrack3.Start, WrtieTrack3.End);
memset(cData,0,sizeof(cData));
track3len = m_ctrlTrack3.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack3.End > track3len)
{
WrtieTrack3.End = track3len;
}
GetDlgItem(IDC_EDIT_Track3)->GetWindowText(WrtieTrack3.Allstring);
WrtieTrack3.Editdtring = WrtieTrack3.Allstring.Left(WrtieTrack3.End).Right(WrtieTrack3.End - WrtieTrack3.Start);
}
//文字內容儲存在source變數中,複製到貼上板中
if(OpenClipboard())
{
HGLOBAL clipbuffer;
char * buffer;
EmptyClipboard();
if(TrackSelect1 == EditSelect)
{
clipbuffer = GlobalAlloc(GMEM_DDESHARE, WrtieTrack1.Editdtring.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer, LPCSTR(WrtieTrack1.Editdtring));
}
else if(TrackSelect2 == EditSelect)
{
clipbuffer = GlobalAlloc(GMEM_DDESHARE, WrtieTrack2.Editdtring.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer, LPCSTR(WrtieTrack2.Editdtring));
}
else if(TrackSelect3 == EditSelect)
{
clipbuffer = GlobalAlloc(GMEM_DDESHARE, WrtieTrack3.Editdtring.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer, LPCSTR(WrtieTrack3.Editdtring));
}
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}
}
//貼上資料到編輯框
void CMSR009BTDlg::OnPasteData()
{
int track1len,track2len,track3len;
char cData[255] = {0};
intMaxsize = 255;
char * buffer = NULL;
//開啟剪貼簿
CString fromClipboard;
if(OpenClipboard())
{
HANDLE hData = GetClipboardData(CF_TEXT);
char * buffer = (char*)GlobalLock(hData);
fromClipboard = buffer;
GlobalUnlock(hData);
CloseClipboard();
}
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
if(TrackSelect1 == EditSelect)
{
m_ctrlTrack1.Paste();
if(m_brush1 != NULL)
{
m_brush1 = NULL;
track1len = m_ctrlTrack1.GetWindowText((char*)cData,Maxsize);
m_ctrlTrack1.SetSel(0, track1len); //設定處理區域
m_ctrlTrack1.SetSelectionCharFormat(cf);
m_ctrlTrack1.SetSel(track1len,track1len); //設定處理區域
}
}
else if(TrackSelect2 == EditSelect)
{
m_ctrlTrack2.Paste();
if(m_brush2 != NULL)
{
m_brush2 = NULL;
track2len = m_ctrlTrack2.GetWindowText((char*)cData,Maxsize);
m_ctrlTrack2.SetSel(0, track2len); //設定處理區域
m_ctrlTrack2.SetSelectionCharFormat(cf);
m_ctrlTrack2.SetSel(track2len,track2len); //設定處理區域
}
}
else if(TrackSelect3 == EditSelect)
{
m_ctrlTrack3.Paste();
if(m_brush3 != NULL)
{
m_brush3 = NULL;
track3len = m_ctrlTrack3.GetWindowText((char*)cData,Maxsize);
m_ctrlTrack3.SetSel(0, track3len); //設定處理區域
m_ctrlTrack3.SetSelectionCharFormat(cf);
m_ctrlTrack3.SetSel(track3len,track3len); //設定處理區域
}
}
}
//選擇資料
void CMSR009BTDlg::OnSelectData()
{
char cData[255] = {0};
intMaxsize = 255;
int track1len,track2len,track3len;
int i,j;
if(TrackSelect1 == EditSelect)
{
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->GetSel(WrtieTrack1.Start, WrtieTrack1.End);
memset(cData,0,sizeof(cData));
track1len = m_ctrlTrack1.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack1.End > track1len)
{
WrtieTrack1.End = track1len;
}
GetDlgItem(IDC_EDIT_Track1)->GetWindowText(WrtieTrack1.Allstring);
WrtieTrack1.Editdtring = WrtieTrack1.Allstring.Left(WrtieTrack1.End).Right(WrtieTrack1.End - WrtieTrack1.Start);
//----------------------------------//
if(WrtieTrack1.Start != WrtieTrack1.End)
{
j = WrtieTrack1.End - WrtieTrack1.Start;
if(j > 9)
{
SetDlgItemText(IDC_MessageTxet,WrtieTrack1.Editdtring);
MessageBox("(Message) The selected number of track1 can not be more than 9 digits","Notion",MB_OK);
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
return;
}
for(i=0;i<j;i++)
{
if((WrtieTrack1.Editdtring[i] < '0') || (WrtieTrack1.Editdtring[i] > '9'))
{
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
SetDlgItemText(IDC_MessageTxet,WrtieTrack1.Editdtring);
MessageBox("(Message) The selected data of track1 can only choose digits!","Notion",MB_OK);
return;
}
}
if (m_brush1)
DeleteObject(m_brush1);
m_brush1 = CreateSolidBrush(RGB(200, 200, 255)); // 根據需要設定
GetDlgItem(IDC_EDIT_Track1)->SetWindowText(WrtieTrack1.Allstring);
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(WrtieTrack1.Start, WrtieTrack1.End);
m_ctrlTrack1.SetFocus();
Invalidate();
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.crTextColor = RGB(255, 0, 0); //文字顏色
m_ctrlTrack1.SetSel(WrtieTrack1.Start, WrtieTrack1.End); //設定處理區域
m_ctrlTrack1.SetSelectionCharFormat(cf);
m_ctrlTrack1.EnableWindow(false);
}
}
else if(TrackSelect2 == EditSelect)
{
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->GetSel(WrtieTrack2.Start, WrtieTrack2.End);
memset(cData,0,sizeof(cData));
track2len = m_ctrlTrack2.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack2.End > track2len)
{
WrtieTrack2.End = track2len;
}
GetDlgItem(IDC_EDIT_Track2)->GetWindowText(WrtieTrack2.Allstring);
WrtieTrack2.Editdtring = WrtieTrack2.Allstring.Left(WrtieTrack2.End).Right(WrtieTrack2.End - WrtieTrack2.Start);
//--------------------------//
if(WrtieTrack2.Start != WrtieTrack2.End)
{
j = WrtieTrack2.End - WrtieTrack2.Start;
if(j > 9)
{
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
SetDlgItemText(IDC_MessageTxet,WrtieTrack2.Editdtring);
MessageBox("(Message) The selected number of track2 can not be more than 9 digits","Notion",MB_OK);
return;
}
for(i=0;i<j;i++)
{
if((WrtieTrack2.Editdtring[i] < '0') || (WrtieTrack2.Editdtring[i] > '9'))
{
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
SetDlgItemText(IDC_MessageTxet,WrtieTrack2.Editdtring);
MessageBox("(Message) The selected data of track2 can only choose digits!","Notion",MB_OK);
return;
}
}
if (m_brush2)
DeleteObject(m_brush2);
m_brush2 = CreateSolidBrush(RGB(200, 200, 255)); // 根據需要設定
GetDlgItem(IDC_EDIT_Track2)->SetWindowText(WrtieTrack2.Allstring);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(WrtieTrack2.Start, WrtieTrack2.End);
m_ctrlTrack2.SetFocus();
Invalidate();
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.crTextColor = RGB(255, 0, 0); //文字顏色
m_ctrlTrack2.SetSel(WrtieTrack2.Start, WrtieTrack2.End); //設定處理區域
m_ctrlTrack2.SetSelectionCharFormat(cf);
m_ctrlTrack2.EnableWindow(false);
}
}
else if(TrackSelect3 == EditSelect)
{
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->GetSel(WrtieTrack3.Start, WrtieTrack3.End);
memset(cData,0,sizeof(cData));
track3len = m_ctrlTrack3.GetWindowText((char*)cData,Maxsize);
if(WrtieTrack3.End > track3len)
{
WrtieTrack3.End = track3len;
}
GetDlgItem(IDC_EDIT_Track3)->GetWindowText(WrtieTrack3.Allstring);
WrtieTrack3.Editdtring = WrtieTrack3.Allstring.Left(WrtieTrack3.End).Right(WrtieTrack3.End - WrtieTrack3.Start);
//----------------------//
if(WrtieTrack3.Start != WrtieTrack3.End)
{
j = WrtieTrack3.End - WrtieTrack3.Start;
if(j > 9)
{
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
SetDlgItemText(IDC_MessageTxet,WrtieTrack3.Editdtring);
MessageBox("(Message) The selected number of track3 can not be more than 9 digits","Notion",MB_OK);
return;
}
for(i=0;i<j;i++)
{
if((WrtieTrack3.Editdtring[i] < '0') || (WrtieTrack3.Editdtring[i] > '9'))
{
m_brush1 = NULL;
m_brush2 = NULL;
m_brush3 = NULL;
((CEdit *)GetDlgItem(IDC_EDIT_Track1))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track2))->SetSel(-1, 0);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(-1, 0);
Invalidate();
SetDlgItemText(IDC_MessageTxet,WrtieTrack3.Editdtring);
MessageBox("(Message) The selected data of track3 can only choose digits!","Notion",MB_OK);
return;
}
}
if (m_brush3)
DeleteObject(m_brush3);
m_brush3 = CreateSolidBrush(RGB(200, 200, 255)); // 根據需要設定
GetDlgItem(IDC_EDIT_Track3)->SetWindowText(WrtieTrack3.Allstring);
((CEdit *)GetDlgItem(IDC_EDIT_Track3))->SetSel(WrtieTrack3.Start, WrtieTrack3.End);
m_ctrlTrack3.SetFocus();
Invalidate();
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
cf.crTextColor = RGB(255, 0, 0); //文字顏色
m_ctrlTrack3.SetSel(WrtieTrack3.Start, WrtieTrack3.End); //設定處理區域
m_ctrlTrack3.SetSelectionCharFormat(cf);
m_ctrlTrack3.EnableWindow(false);
}
}
if((WrtieTrack1.Start == WrtieTrack1.End) && (WrtieTrack2.Start == WrtieTrack2.End) && (WrtieTrack3.Start == WrtieTrack3.End))
{
MessageBox("Did not select any data!","Notion",MB_OK);
}
}
void CMSR009BTDlg::OnDeselectData()
{
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
cf.dwEffects = 0;
if(TrackSelect1 == EditSelect)
{
m_ctrlTrack1.EnableWindow(true);
WrtieTrack1.Start = 0;
WrtieTrack1.End = 0;
WrtieTrack1.Editdtring = "";
WrtieTrack1.Allstring = "";
m_brush1 = NULL;
m_ctrlTrack1.SetSel(0, 200); //設定處理區域
m_ctrlTrack1.SetSelectionCharFormat(cf);
m_ctrlTrack1.SetSel(0,0); //設定處理區域
}
else if(TrackSelect2 == EditSelect)
{
m_ctrlTrack2.EnableWindow(true);
WrtieTrack2.Start = 0;
WrtieTrack2.End = 0;
WrtieTrack2.Editdtring = "";
WrtieTrack2.Allstring = "";
m_brush2 = NULL;
m_ctrlTrack2.SetSel(0, 200); //設定處理區域
m_ctrlTrack2.SetSelectionCharFormat(cf);
m_ctrlTrack2.SetSel(0,0); //設定處理區域
}
else if(TrackSelect3 == EditSelect)
{
m_ctrlTrack3.EnableWindow(true);
WrtieTrack3.Start = 0;
WrtieTrack3.End = 0;
WrtieTrack3.Editdtring = "";
WrtieTrack3.Allstring = "";
m_brush3 = NULL;
m_ctrlTrack3.SetSel(0, 200); //設定處理區域
m_ctrlTrack3.SetSelectionCharFormat(cf);
m_ctrlTrack3.SetSel(0,0); //設定處理區域
}
}