RightFormVew.cpp 現在の全ソ-ス
// RightFormVew.cpp : RightFormVew クラスの実装
//
include “stdafx.h”
include “ControlPractice.h”
include “ControlPracticeDoc.h”
include “RightFormVew.h”
ifdef _DEBUG
define new DEBUG_NEW
endif
// RightFormVew
IMPLEMENT_DYNCREATE(RightFormVew, CFormView)
//これらのハンドラ-は必ず必要になります
BEGIN_MESSAGE_MAP(RightFormVew, CFormView)
ON_WM_SIZE()
ON_WM_DRAWITEM()
ON_WM_MEASUREITEM()
ON_BN_CLICKED(IDOK, &RightFormVew::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &RightFormVew::OnBnClickedCancel)
ON_BN_CLICKED(IDC_PRINT, &RightFormVew::OnBnClickedPrint)
ON_BN_CLICKED(IDC_BUTTON1, &RightFormVew::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &RightFormVew::OnBnClickedButton2)
ON_NOTIFY(MCN_SELECT, IDC_MONTHCALENDAR1, &RightFormVew::OnMcnSelectMonthcalendar1)
ON_NOTIFY(MCN_SELCHANGE, IDC_MONTHCALENDAR1, &RightFormVew::OnMcnSelchangeMonthcalendar1)
ON_NOTIFY(MCN_GETDAYSTATE, IDC_MONTHCALENDAR1, &RightFormVew::OnMcnGetdaystateMonthcalendar1)
ON_NOTIFY(NM_RCLICK, IDC_LIST1, &RightFormVew::OnNMRclickList1)
ON_NOTIFY(NM_CLICK, IDC_LIST1, &RightFormVew::OnNMClickList1)
ON_NOTIFY(NM_RETURN, IDC_LIST1, &RightFormVew::OnNMReturnList1)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &RightFormVew::OnNMDblclkList1)
ON_WM_PAINT()
ON_NOTIFY(LVN_ENDSCROLL, IDC_LIST1, &RightFormVew::OnLvnEndScrollList1)
END_MESSAGE_MAP()
// RightFormVew コンストラクション/デストラクション
RightFormVew::RightFormVew()
: CFormView(RightFormVew::IDD)
{
// TODO: 構築コードをここに追加します。
}
RightFormVew::~RightFormVew()
{
}
void RightFormVew::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, CtlistControl1);
DDX_Control(pDX, IDCANCEL, cfITCANCEL);
DDX_Control(pDX, IDOK, ctITOK);
DDX_Control(pDX, IDC_MONTHCALENDAR1, ctCalender);
}
BOOL RightFormVew::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
// 修正してください。
return CFormView::PreCreateWindow(cs);
}
//============================================================
//=================初期化が行われます=========================
//============================================================
void RightFormVew::OnInitialUpdate()
{
CFormView::OnInitialUpdate(); //これらの関数は必ず必要になります
GetParentFrame()->RecalcLayout(); //これらの関数は必ず必要になります
ResizeParentToFit(); //これらの関数は必ず必要になります
//============================================================
//============================================================
//============================================================
HBITMAP hBitmap ;
m_pStatic =new CStatic();
hBitmap = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BMPIMG));
m_pStatic->Create(TEXT(“BMP”),WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE,CRect(0,0,574,30),this);
m_pStatic->ShowWindow(SW_HIDE);
m_pStatic->SetBitmap(hBitmap) ;
//============================================================
//================ 移動と大きさ設定 ==================
//============================================================
CtlistControl1.MoveWindow(50,10,295,100);
//============================================================
//============================================================
LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
//============================================================
for (int i=0;i<3;i++){
lvc.iSubItem= i;
lvc.pszText=RightFormColumnLabel[i];
lvc.cx =(int)(RightFormWidth[i]);
lvc.fmt =RightFormFmt[i];
CtlistControl1.InsertColumn(i,&lvc);
}
//============================================================
//============================================================
//============================================================
LV_ITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_IMAGE |LVIF_PARAM ;
lvi.iSubItem =0;
for(int i=0;i<10;i++){
lvi.iItem =i;
lvi.pszText =RightFormVew_buffDim[i][0];
CtlistControl1.InsertItem(&lvi);
}
//初期化が終了しましたた
CtlistControl1.ShowWindow(SW_SHOW) ;
}
// RightFormVew 診断
ifdef _DEBUG
void RightFormVew::AssertValid() const
{
CFormView::AssertValid();
}
void RightFormVew::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CControlPracticeDoc* RightFormVew::GetDocument() const // デバッグ以外のバージョンはインラインです。
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CControlPracticeDoc)));
return (CControlPracticeDoc*)m_pDocument;
}
endif //_DEBUG
// RightFormVew メッセージ ハンドラ
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
BOOL RightFormVew::PreTranslateMessage(MSG* pMsg)
{
CControlPracticeDoc* pDoc = GetDocument();
//=========================================================
CString sval=_T("");
//=========================================================
if(pMsg->message==WM_KEYDOWN){
//===============================
switch(pMsg->wParam){
case VK_RETURN :break;
case VK_CONTROL :break;
case VK_ESCAPE :break;
case VK_F1 :break;
case VK_F2 :break;
case VK_F3 :break;
case VK_F4 :break;
case VK_F5 :break;
case VK_F6 :break;
case VK_F7 :break;
case VK_F8 :break;
case VK_F9 :break;
case VK_F10 :break;
case VK_UP :break;
case VK_LEFT :break;
case VK_DOWN :break;
case VK_RIGHT :break;
case VK_DELETE :break;
case VK_INSERT :break;
}
}
return CFormView::PreTranslateMessage(pMsg);
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// MeikingDish メッセージ ハンドラ
void RightFormVew::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
int test=0;
CControlPracticeDoc* pDoc = GetDocument();
//========================================================
switch(lHint){
case ID_FORM_RIGHT_UPDATE_ID_OK_DIS:
test=0;//メインフレ-から呼び出されます
break;
case ID_FORM_RIGHTUPDATE_ID_CANCSL_DIS:
test=0;//メインフレ-から呼び出されます
break;
//==================ビューが切り替わりが強要されました====================
case 0:
test=0;//このフレ-ムが作成された時この位置が呼び出されます
break;
}
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::CStringDataMoveToStaticEriyaReset()
{
CString vs=_T(” “);
try{
for(int item=0;item<100;item++){
for(int isub=0;isub<8;isub++){
_tcsncpy_s(RightFormVew_buffDim[item][isub],MAX_PATH,(LPCTSTR)vs,_TRUNCATE);
}
}
}catch(CMemoryException e){
e.ReportError();
e.Delete() ;
}
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::CStringDataMoveToStaticEriya(CString vs,int item,int isub)
{
try{
_tcsncpy_s(RightFormVew_buffDim[item][isub],MAX_PATH,(LPCTSTR)vs,_TRUNCATE);
}catch(CMemoryException e){
e.ReportError();
e.Delete() ;
}
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CControlPracticeDoc* pDoc = GetDocument();
//========================================================
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rcItem(lpDrawItemStruct->rcItem);
int nItem = lpDrawItemStruct->itemID ;
//=============================================
LV_ITEM lvi;
switch(lpDrawItemStruct->CtlID) {
case IDC_LIST1:
lvi.mask = LVIF_TEXT | LVIF_IMAGE |LVIF_PARAM ; //準備が完了したのでデ-タを表示します
lvi.iSubItem =0;
//=========================================
lvi.iItem =nItem;
lvi.pszText =LeftFormVew_buffDim[nItem][0];
CtlistControl1.SetItem(&lvi);
for(int sub=0;sub<7;sub++){
CString sb=CtlistControl1.GetItemText(nItem,sub);
if(sb!=(CString)RightFormVew_buffDim[nItem][sub]){
CtlistControl1.SetItemText(nItem,sub,RightFormVew_buffDim[nItem][sub]);
}
}
//=========================================
List1RowListControl(pDC,nItem);
break;
}
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::List1RowListControl(CDC* pDC,int nItem)
{
CControlPracticeDoc* pDoc = GetDocument();
//=========================================================
COLORREF clrTextSave =pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
COLORREF clrBkSave = pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
//==================ブラシの初期化=========================
CBrush cbrA,cbrB;
//RGB(255,241,0) RGB(243,152,0) RGB(233,83,131)
//RGB(143,195,31) RGB(0,153,217) RGB(237,109,70)
cbrA.CreateSolidBrush(RGB(233, 83,131));
cbrB.CreateSolidBrush(RGB(255,255,255));
//=========================================================
CPen pen;
CPen* pOldPen;
pen.CreatePen(PS_SOLID,1,LINE_COLOR);
pOldPen=pDC->SelectObject(&pen);
//=========================================================
CRect rcAllLabels;
CtlistControl1.GetItemRect(nItem, rcAllLabels, LVIR_BOUNDS);
//=========================================================
CRect lRect,rc;
pDC->SetTextColor(RGB(0,0,0));
//=========================================================
int topIndex=CtlistControl1.GetTopIndex(); //表示の先頭nItem
int nLast = topIndex+CtlistControl1.GetCountPerPage();//表示の後端nItem
//======================列幅は3個です======================
for(int i=0; i<3; i++){
//=====================================
pDC->SelectObject(&pen);
//=====================================
CtlistControl1.GetSubItemRect(nItem,i,LVIR_BOUNDS,lRect);
//================縦線===============
pDC->MoveTo(lRect.left,lRect.top) ;
pDC->LineTo(lRect.left,lRect.bottom) ;
//================横線===============
pDC->MoveTo(lRect.left ,lRect.bottom);
pDC->LineTo(lRect.right,lRect.bottom);
//================文字を表示します==========
lRect.right=CtlistControl1.GetColumnWidth(i);
lRect.top+=1; lRect.bottom-=1;
pDC->SetTextColor(RGB(0,0,0));
//==========================================
CString vt=_T("");
vt.Format(_T("文字列=%s"),CtlistControl1.GetItemText(nItem,i));
pDC->DrawText(vt,-1,lRect,DT_LEFT | DT_SINGLELINE | DT_VCENTER);
}
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnBnClickedOk()
{
CControlPracticeDoc* pDoc = GetDocument();
pDoc->FormVewNmcer |=0x21 ;//ID OK を設定
CWnd* pWnd=AfxGetMainWnd() ;
pWnd->SendMessage(ID_VEW_CHENGER);//メインフレ-ムへ指示を発信
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnBnClickedCancel()
{
CControlPracticeDoc* pDoc = GetDocument();
pDoc->FormVewNmcer |=0x22 ;//ID CANCEL を設定
CWnd* pWnd=AfxGetMainWnd() ;
pWnd->SendMessage(ID_VEW_CHENGER);//メインフレ-ムへ指示を発信
}
/////////////////////////////////////////////////////////////////////////////
///////////////////////// 印刷の実行 ///////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnBnClickedPrint()
{
CControlPracticeDoc* pDoc = GetDocument();
pDoc->FormVewNmcer |=0x44 ;//ID CANCEL を設定
CWnd* pWnd=AfxGetMainWnd() ;
pWnd->SendMessage(ID_VEW_CHENGER);//メインフレ-ムへ指示を発信
}
/////////////////////////////////////////////////////////////////////////////
////////////////////////ハ-ドコピ-読み出し/////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnBnClickedButton1()
{
CControlPracticeDoc* pDoc = GetDocument();
HANDLE hText ;
HBITMAP hBitmap ;
//=============================================================
CString val=_T(""),valC=_T("");
//=============================================================
OpenClipboard();
//=============================================================
if (IsClipboardFormatAvailable(CF_BITMAP)) {
hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
m_pStatic->SetBitmap(hBitmap);
EmptyClipboard() ;
}
else {
hText = GetClipboardData(CF_UNICODETEXT);
if(hText == NULL) ;
else {
val.Format(_T("%s"), GlobalLock(hText));
GlobalUnlock(hText) ;
EmptyClipboard() ;
}
}
//=============================================================
CloseClipboard();
}
/////////////////////////////////////////////////////////////////////////////
//////////////////////// ビットマップ保存ボタン ///////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnBnClickedButton2()
{
BitmapToFilaeSave(_T(“TEST_BMP_FILE”));
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::BitmapToFilaeSave(CString FileName)
{
CControlPracticeDoc* pDoc = GetDocument();
//==============================================================
HBITMAP hBitmap,hBitmapPrev;
BITMAPINFO *pbmi;
void *pbits;
HANDLE hfile;
//==============================================================
HDC hDC ;
HDC hDCCompat;
//==============================================================
DWORD temp;
BITMAPFILEHEADER bmfh;
HWND hWnd=RightFormVew::m_hWnd;
hDC=::GetDC(hWnd);
//==============================================================
CString fNam=FileName+_T("bmp");
hBitmap=m_pStatic->GetBitmap() ;
//==============================================================
CRect rect,rectB;
GetWindowRect(rectB) ;
m_pStaticB->GetWindowRect(rect);
//==============================================================
int ty=rect.top-rectB.top ;
int tx=rect.left-rectB.left;
rect.top=ty ;rect.bottom=rect.top+128;
rect.left=tx;rect.right=rect.left+128;
int wih=rect.Width();
//==============================================================
pbmi=(BITMAPINFO*)new BYTE[sizeof(BITMAPINFO)] ;
ZeroMemory(&pbmi->bmiHeader,sizeof(pbmi->bmiHeader));
pbmi->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
pbmi->bmiHeader.biWidth =rect.Width() ;
pbmi->bmiHeader.biHeight=rect.Height();
pbmi->bmiHeader.biBitCount=GetDeviceCaps(hDC,BITSPIXEL);
pbmi->bmiHeader.biPlanes=1;
pbmi->bmiHeader.biSizeImage=(((pbmi->bmiHeader.biWidth*pbmi->bmiHeader.biBitCount+31)>>3)
& 0xfffffffc)*pbmi->bmiHeader.biHeight;
//==============================================================
hBitmap=CreateDIBSection(hDC,pbmi,DIB_RGB_COLORS,&pbits,NULL,0);
hDCCompat=CreateCompatibleDC(hDC);
hBitmapPrev=(HBITMAP)SelectObject(hDCCompat,hBitmap);
BitBlt(hDCCompat,0,0,pbmi->bmiHeader.biWidth,pbmi->bmiHeader.biHeight,hDC,rect.left,rect.top,SRCCOPY);
//==============================================================
bmfh.bfType=0x4d42;
bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bmfh.bfSize=bmfh.bfOffBits+pbmi->bmiHeader.biSizeImage;
//==============================================================
hfile=CreateFile(fNam,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);
//==============================================================
WriteFile(hfile,&bmfh,sizeof(bmfh),&temp,NULL);
WriteFile(hfile,&pbmi->bmiHeader,sizeof(pbmi->bmiHeader),&temp,NULL);
SetFilePointer(hfile,bmfh.bfOffBits,NULL,FILE_BEGIN);
WriteFile(hfile,pbits,pbmi->bmiHeader.biSizeImage,&temp,NULL);
//==============================================================
CloseHandle(hfile) ;
delete[] (BYTE*)pbmi;
//==============================================================
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////// カレンダ-コントロ-ル /////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnMcnSelectMonthcalendar1(NMHDR *pNMHDR, LRESULT *pResult)
{
CString time ;
CControlPracticeDoc* pDoc = GetDocument();
LPNMSELCHANGE pSelChange = reinterpret_cast<LPNMSELCHANGE>(pNMHDR);
SYSTEMTIME st ;
GetLocalTime(&st);
//==============================================================================
time.Format(_T("%d/%d/%d/%d:%d"),st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute);
*pResult = 0;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////// カレンダ-コントロ-ル /////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnMcnSelchangeMonthcalendar1(NMHDR *pNMHDR, LRESULT *pResult)
{
CString time ;
CControlPracticeDoc* pDoc = GetDocument();
LPNMSELCHANGE pSelChange = reinterpret_cast<LPNMSELCHANGE>(pNMHDR);
SYSTEMTIME st ;
GetLocalTime(&st);
//==============================================================================
time.Format(_T("%d/%d/%d/%d:%d"),st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute);
*pResult = 0;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////// カレンダ-コントロ-ル /////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnMcnGetdaystateMonthcalendar1(NMHDR *pNMHDR, LRESULT *pResult)
{
CString time ;
CControlPracticeDoc* pDoc = GetDocument();
LPNMSELCHANGE pSelChange = reinterpret_cast<LPNMSELCHANGE>(pNMHDR);
SYSTEMTIME st ;
GetLocalTime(&st);
//==============================================================================
time.Format(_T("%d/%d/%d/%d:%d"),st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute);
*pResult = 0;
}
/////////////////////////////////////////////////////////////////////////////
////////////////////リストボックスコントロ-ル///////////////////////////////
/////////////////////// 右 クリック //////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnNMRclickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
CControlPracticeDoc* pDoc = GetDocument();
//=======================================-
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
NMLVDISPINFO *pdi=(NMLVDISPINFO*)pNMHDR;
if (pNMLV->iItem<0) return; *pResult = 0;
}
/////////////////////////////////////////////////////////////////////////////
////////////////////リストボックスコントロ-ル///////////////////////////////
/////////////////////// クリック ////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
CControlPracticeDoc* pDoc = GetDocument();
//=======================================-
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
NMLVDISPINFO *pdi=(NMLVDISPINFO*)pNMHDR;
if (pNMLV->iItem<0) return; *pResult = 0;
}
/////////////////////////////////////////////////////////////////////////////
////////////////////リストボックスコントロ-ル///////////////////////////////
/////////////////////// Return クリック ///////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnNMReturnList1(NMHDR *pNMHDR, LRESULT *pResult)
{
CControlPracticeDoc* pDoc = GetDocument();
//=======================================-
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
NMLVDISPINFO *pdi=(NMLVDISPINFO*)pNMHDR;
if (pNMLV->iItem<0) return; *pResult = 0;
}
/////////////////////////////////////////////////////////////////////////////
////////////////////リストボックスコントロ-ル///////////////////////////////
/////////////////////// ダブルクリック //////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
CControlPracticeDoc* pDoc = GetDocument();
//=======================================-
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
NMLVDISPINFO *pdi=(NMLVDISPINFO*)pNMHDR;
if (pNMLV->iItem<0) return; *pResult = 0;
}
/////////////////////////////////////////////////////////////////////////////
//////////////////////// 再表示が必要です ///////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void RightFormVew::OnPaint()
{
CPaintDC dc(this); // device context for painting
}
/////////////////////////////////////////////////////////////////////////////
//////////////////////リストボックスコントロ-ル ////////////////////////
//////////////////////// スクロ-ル ////////////////////////////////
void RightFormVew::OnLvnEndScrollList1(NMHDR *pNMHDR, LRESULT *pResult)
{
CControlPracticeDoc* pDoc = GetDocument();
//=======================================-
LPNMLVSCROLL pStateChanged = reinterpret_cast<LPNMLVSCROLL>(pNMHDR);
CtlistControl1.Invalidate(FALSE);//再表示を行います
*pResult = 0;
}
リストコントロ-ルのセル選択を実装(1) リストコントロ-ルのセル選択を実装(3)