// clippingImageMFCDlg.cpp : 実装ファイル // #include "stdafx.h" #include "clippingImageMFC.h" #include "clippingImageMFCDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif CBrush inverseBrush(RGB(255,255,255)); CRect pictBoxRect(180,70,530,420); CPen pen(PS_DASH,1,RGB(255,255,255)); #define BOTTOMOFFSET 30 #define RIGHTOFFSET 20 bool flg = false;//起動時にイベントが発生してサイズを変えると落ちるため、回避のためのフラグ // アプリケーションのバージョン情報に使われる CAboutDlg ダイアログ bool beginXFocus =false; bool beginYFocus =false; bool endXFocus =false; bool endYFocus =false; bool textFocus=false; int maxrepeat=10000; class CAboutDlg : public CDialogEx { public: CAboutDlg(); // ダイアログ データ enum { IDD = IDD_ABOUTBOX }; protected: // virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート // 実装 protected: DECLARE_MESSAGE_MAP() public: }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CclippingImageMFCDlg ダイアログ CclippingImageMFCDlg::CclippingImageMFCDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CclippingImageMFCDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CclippingImageMFCDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_SELECTEDFILE2, filePathTextBox); DDX_Control(pDX, IDC_CURRENTPOSITION, currentPositionText); //DDX_Control(pDX, IDC_BEGINX, beginXtext); //DDX_Control(pDX, IDC_BEGINY, beginYtext); //DDX_Control(pDX, IDC_ENDX, endXtext); //DDX_Control(pDX, IDC_ENDY, endYtext); DDX_Control(pDX, IDC_PROGRESS,progressText); DDX_Control(pDX,IDC_PROGRESSBAR,CProgressCtrl); DDX_Control(pDX,IDC_PREFIX,prefixedit); DDX_Control(pDX,IDC_MAXNUM,maxnumedit); } BEGIN_MESSAGE_MAP(CclippingImageMFCDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_FILESELECT2, &CclippingImageMFCDlg::OnBnClickedFileselect2) ON_BN_CLICKED(IDC_MAKEFILE, &CclippingImageMFCDlg::OnBnClickedMakeFile) ON_WM_MOUSEMOVE() ON_WM_SIZE()//onsize ON_WM_DESTROY() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_CTLCOLOR() ON_EN_CHANGE(IDC_BEGINX, &CclippingImageMFCDlg::OnEnChangeBeginx) ON_EN_CHANGE(IDC_BEGINY, &CclippingImageMFCDlg::OnEnChangeBeginy) ON_EN_CHANGE(IDC_ENDX, &CclippingImageMFCDlg::OnEnChangeEndx) ON_EN_CHANGE(IDC_ENDY, &CclippingImageMFCDlg::OnEnChangeEndy) ON_EN_SETFOCUS(IDC_BEGINX, &CclippingImageMFCDlg::OnEnSetfocusBeginx) ON_EN_SETFOCUS(IDC_BEGINY, &CclippingImageMFCDlg::OnEnSetfocusBeginy) ON_EN_SETFOCUS(IDC_ENDX, &CclippingImageMFCDlg::OnEnSetfocusEndx) ON_EN_SETFOCUS(IDC_ENDY, &CclippingImageMFCDlg::OnEnSetfocusEndy) ON_EN_CHANGE(IDC_PREFIX, &CclippingImageMFCDlg::OnEnChangePrefix) ON_BN_CLICKED(IDC_CSV, &CclippingImageMFCDlg::OnBnClickedCsv) ON_BN_CLICKED(IDC_FOLDER, &CclippingImageMFCDlg::OnBnClickedCheck1) ON_WM_DROPFILES() END_MESSAGE_MAP() // CclippingImageMFCDlg メッセージ ハンドラー BOOL CclippingImageMFCDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // "バージョン情報..." メニューをシステム メニューに追加します。 // IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、 // Framework は、この設定を自動的に行います。 SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定 SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定 // TODO: 初期化をここに追加します。 SetDlgItemText(IDC_BEGINX,L"0"); SetDlgItemText(IDC_BEGINY,L"0"); SetDlgItemText(IDC_ENDX,L"0"); SetDlgItemText(IDC_ENDY,L"0"); prefix=L"mini"; prefixedit.SetWindowTextW(prefix); maxnumedit.SetWindowTextW(L"999"); sheedFilePath=L"sample-0.bmp"; sheedfiletitle=L"sample-0"; SetDlgItemText(IDC_ORIGINALNAME,sheedFilePath); SetDlgItemText(IDC_OUTPUTNAME,L"_"+sheedFilePath); SetDlgItemText(IDC_FOLDERNAME,L"mini"); csvcheck=false; foldercheck=false; drawFlag=FALSE; this->MoveWindow(0,0,570,500); aspectRatio=1.0;//初期値 dib.Open(&sheedFilePath); if(dib.IsValid()){ aspectRatio= (float)dib.getWidth()/(float)dib.getHeight(); int longer = max(dib.getWidth(),dib.getHeight()); scalex=(float)dib.getWidth()/(float)pictBoxRect.Width(); scaley=(float)dib.getHeight()/(float)pictBoxRect.Height(); //長いほうに合わせて //長い方に合わせてアスペクト比を適用 }else{ } this->GetClientRect(&clientRect); //この二つは常にダイアログの下のほうにいること progressText.MoveWindow(0,clientRect.bottom-BOTTOMOFFSET,70,20); CProgressCtrl.MoveWindow(70,clientRect.bottom-BOTTOMOFFSET,300,20); adjustImageSize(clientRect.Width(),clientRect.Height()); size.cx=1;size.cy=1; wchar_t buf[_MAX_PATH]; GetCurrentDirectory(_MAX_PATH,buf); directory.Format(L"%s",buf); maxrepeat=GetDlgItemInt(IDC_MAXNUM); CProgressCtrl.SetRange(0,maxrepeat); flg=true; return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。 } void CclippingImageMFCDlg::OnSysCommand(UINT nID, LPARAM lParam) { //if(nID ==SC_RESTORE ){MessageBox(L"元のサイズに戻した");} if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } void CclippingImageMFCDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 描画のデバイス コンテキスト SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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 { CClientDC dc(this); CDC pictureField; CBitmap m_bmp; pictureField.CreateCompatibleDC(&dc); m_bmp.CreateCompatibleBitmap(&dc,pictBoxRect.Width(),pictBoxRect.Height());//error pictureField.SelectObject(&m_bmp); dib.Draw(&pictureField,0,0,pictBoxRect.Width(),pictBoxRect.Height()); setRect(&clippingRect,&begin,&end); if(clippingRect.Width() >0 && clippingRect.Height() >0){ pictureField.DrawEdge(&clippingRect,EDGE_BUMP,BF_RECT); } dc.BitBlt(pictBoxRect.left,pictBoxRect.top,pictBoxRect.Width(),pictBoxRect.Height(),//転送先パラメータ //転送元パラメータ &pictureField, 0,0,//pictBoxRect.left,pictBoxRect.top, SRCCOPY); CDialogEx::OnPaint();//これないと周りのボタンが消える } } HCURSOR CclippingImageMFCDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CclippingImageMFCDlg::adjustImageSize(int cwidth,int cheight){ float dialogaspectratio=(float)cwidth/(float)cheight; if(aspectRatio<=1.0){//縦長の場合 正方形の場合 if(dialogaspectratioaspectRatio){ int width=(int)((float)(cheight-BOTTOMOFFSET-20-70)*aspectRatio); pictBoxRect.SetRect(200,70,200+width,cheight-BOTTOMOFFSET-20); }else{ int height=(int)((float)(cwidth-RIGHTOFFSET-200)/aspectRatio); pictBoxRect.SetRect(200,70,cwidth-RIGHTOFFSET,70+height); } } } void CclippingImageMFCDlg::adjustControllPlacement(int cwidth,int cheight){ //OnSizeのときのみ使う //this->GetClientRect(&clientRect); //この二つは常にダイアログの下のほうにいること progressText.MoveWindow(0,cheight-BOTTOMOFFSET,70,20); CProgressCtrl.MoveWindow(70,cheight-BOTTOMOFFSET,300,20); //pictBoxもサイズ調整しなおし。 adjustImageSize(cwidth,cheight); } void CclippingImageMFCDlg:: afterGetFilePath(){ SetDlgItemText(IDC_ORIGINALNAME,sheedfiletitle+L".bmp"); UpdateData(FALSE); filePathTextBox.SetWindowTextW(sheedFilePath); wchar_t buf[_MAX_PATH]; GetCurrentDirectory(_MAX_PATH,buf); directory.Format(L"%s",buf); CString outputfilename; outputfilename=L"_"+sheedfiletitle+L".bmp"; SetDlgItemText(IDC_OUTPUTNAME,outputfilename); getBitmapProfile(); if(bitmapInfoHeader.biBitCount>=24){ CString str; str.Format(L"1ピクセルあたり%dビットのbmpには対応していません。8ビットか12ビットのbmpを選んでください。",bitmapInfoHeader.biBitCount); MessageBox(str);}else{ dib.Open(&sheedFilePath); if(dib.IsValid()){ aspectRatio= (float)dib.getWidth()/(float)dib.getHeight(); int longer = max(dib.getWidth(),dib.getHeight()); scalex=(float)dib.getWidth()/(float)pictBoxRect.Width(); scaley=(float)dib.getHeight()/(float)pictBoxRect.Height(); //長いほうに合わせて //長い方に合わせてアスペクト比を適用 adjustImageSize(clientRect.Width(),clientRect.Height()); //ここでpictBoxのサイズも変わっているはず。なのになぜ? //画像が変わったんだからpictboxrectも変えなくては InvalidateRect(pictBoxRect,FALSE); //Invalidate();//(pictBoxRect,FALSE); }else{ MessageBox(L"bmp画像を選んでください"); } } } void CclippingImageMFCDlg::OnBnClickedFileselect2() { CString filter("BMP Files (*.bmp)|*.bmp|"); CFileDialog selDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter); if (selDlg.DoModal() == IDOK) { sheedFilePath = selDlg.GetPathName(); sheedfiletitle = selDlg.GetFileTitle(); afterGetFilePath(); } } void CclippingImageMFCDlg::OnDropFiles(HDROP hDropInfo) { // TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。 TCHAR FileName[100]; int NameSize = sizeof(FileName); int FileNumber; FileNumber = DragQueryFile(hDropInfo, 0, FileName, NameSize); sheedFilePath.Format(L"%s", FileName); //exeファイルのパスを分解 TCHAR drive[_MAX_DRIVE]; TCHAR dir[_MAX_DIR]; TCHAR fname[_MAX_FNAME]; TCHAR ext[_MAX_EXT]; _wsplitpath(FileName,drive,dir,fname,ext); directory.Format(L"%s",dir); SetCurrentDirectory(directory); sheedfiletitle.Format(L"%s",fname); afterGetFilePath(); CDialogEx::OnDropFiles(hDropInfo); } void CclippingImageMFCDlg::OnSize(UINT nType, int cx, int cy) {//cx,cyが変更後のサイズかな? CDialogEx::OnSize(nType, cx, cy); GetClientRect(&clientRect); if(flg){ adjustControllPlacement(cx,cy); Invalidate(); } } void CclippingImageMFCDlg::setRect(CRect *rect,CPoint *p1,CPoint *p2){ int top,left,right,bottom; right=max(p1->x,p2->x); left= min(p1->x,p2->x); top=min(p1->y,p2->y); bottom= max(p1->y,p2->y); rect->SetRect(left,top,right,bottom); } void CclippingImageMFCDlg::makeMiniFile16bit(CString *filepath,CString *numst){ short int *image; image = new short int[bitmapInfoHeader.biSizeImage];//ここで1000*1000 readImage(image,numst); short int* outputImage = new short int[(outputRect.Width())*outputRect.Height()]; makeOutPutImageData(image,outputImage); makeCSVfile(outputImage,numst); writeImage(outputImage,numst); delete image; } void CclippingImageMFCDlg::makeCSVfile(short int *outputImage,CString *numst){ CString outputcsvname; if(foldercheck){ outputcsvname=directory+L"\\"+foldername+L"\\"+prefix+L"_"+datasetname+L"-"+*numst+L".csv"; }else{ outputcsvname=directory+L"\\"+prefix+L"_"+datasetname+L"-"+*numst+L".csv"; } ofstream csvfile(outputcsvname); csvfile.setf(ios::dec); for(int y=realClippingRect.Height();y>0;y--){//上下逆かもしれないけど、 stringstream str(""); for(int x=0;x0;y--){ for(int x=0;xx){ outdata[((ycount)*outputRect.Width())+xcount]=data[(bitmapInfoHeader.biHeight-y)*bitmapInfoHeader.biWidth+x]; }else{ outdata[((ycount)*outputRect.Width())+xcount]=0x00; } xcount++; if(xcount>=outputRect.Width()){ ycount++; xcount=0; } } } } } void CclippingImageMFCDlg::getBitmapProfile(){ HANDLE handle; DWORD temp; handle = CreateFile(sheedFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); // DIBファイルヘッダーを開き、読み込む ReadFile(handle,&bitmapFileHeader,sizeof(BITMAPFILEHEADER),&temp,NULL); ReadFile(handle,&bitmapInfoHeader,sizeof(BITMAPINFOHEADER),&temp,NULL); if(bitmapInfoHeader.biBitCount<24){ ReadFile(handle,rgbquad,1024,&temp,NULL); } CloseHandle(handle); } void CclippingImageMFCDlg::makeOutPutImageData(BYTE *data,BYTE *outdata){ //ここで切り取り作業だ。 int xcount=0; int ycount=0; //元画像の横幅が4の倍数でなかった場合 int truewidth; if(bitmapInfoHeader.biWidth%4 !=0){ truewidth=bitmapInfoHeader.biWidth + (4-bitmapInfoHeader.biWidth%4 ); }else{ truewidth=bitmapInfoHeader.biWidth; } for(int y=bitmapInfoHeader.biHeight;y>=0;y--){ for(int x=0;xx){ outdata[((ycount)*outputRect.Width())+xcount]=data[(bitmapInfoHeader.biHeight-1-y)*truewidth+x]; //ビットマップは下から上へ向かって描画するのでbitmapInfoHeader.biHeight-1-yにした }else{ outdata[((ycount)*outputRect.Width())+xcount]=0x00; } xcount++; if(xcount>=outputRect.Width()){ ycount++; xcount=0; } } } } } void CclippingImageMFCDlg::makeMiniFile(CString *numst){ BYTE *image = new BYTE[bitmapInfoHeader.biSizeImage];//ここで1000*1000 readImage(image,numst); BYTE *outputImage = new BYTE[(outputRect.Width())*outputRect.Height()]; makeOutPutImageData(image,outputImage); delete image; if(csvcheck){makeCSVfile(outputImage,numst);} writeImage(outputImage,numst); delete outputImage; } void CclippingImageMFCDlg::makeCSVfile(BYTE *outputImage,CString *numst){ CString outputcsvname; if(foldercheck){ outputcsvname=directory+L"\\"+foldername+L"\\"+prefix+L"_"+datasetname+L"-"+*numst+L".csv"; }else{ outputcsvname=directory+L"\\"+prefix+L"_"+datasetname+L"-"+*numst+L".csv"; } ofstream csvfile(outputcsvname); csvfile.setf(ios::dec); for(int y=realClippingRect.Height()-1;y>=0;y--){//上下逆かもしれないけど、 for(int x=0;x=0){ maxrepeat=GetDlgItemInt(IDC_MAXNUM); if(foldercheck){ GetDlgItemText(IDC_FOLDERNAME,foldername); } //繰り返す必要のない初期化処理をここでする。 setRect(&realClippingRect,&realbegin,&realend); if(realClippingRect.Width()<=0 || realClippingRect.Height()<=0){ MessageBox(L"切り取り範囲を指定してください"); } else{ getBitmapProfile(); needForQuad=4-(realClippingRect.Width()%4);//4の倍数になるためにはあと何個足せばいい? if(needForQuad==4){needForQuad=0;} outputRect.SetRect(realClippingRect.left,realClippingRect.top,realClippingRect.right+needForQuad,realClippingRect.bottom); obitmapInfoHeader=bitmapInfoHeader; obitmapFileHeader=bitmapFileHeader; obitmapInfoHeader.biWidth=realClippingRect.Width(); obitmapInfoHeader.biHeight=realClippingRect.Height(); obitmapInfoHeader.biSizeImage=realClippingRect.Height()*(realClippingRect.Width()+needForQuad); obitmapFileHeader.bfSize=bitmapFileHeader.bfOffBits+obitmapInfoHeader.biSizeImage; CString folderpath =directory+L"\\"+foldername;//+L"\\"; //フォルダを作る if(foldercheck){ CreateDirectory( folderpath, NULL ); } for(int i=sheedid;i<=maxrepeat;i++){ CFileFind find; CString numst; numst.Format(L"%d",i); CString filepath=directory+L"\\"+datasetname+L"-"+numst+L".bmp"; BOOL ok =find.FindFile(filepath); if(ok){ if(bitmapInfoHeader.biBitCount <16){ makeMiniFile(&numst); }else{//12-16ビットはこっち makeMiniFile16bit(&filepath,&numst); } }else{//ファイル存在しないので飛ばす。 } CProgressCtrl.SetPos(i); } MessageBox(L"完成!"); } } } void CclippingImageMFCDlg::pointConversion(CPoint *point){ CPoint pt=CPoint(pictBoxRect.left,pictBoxRect.top);//座標体系が違うみたいなので currentPoint=*point-pt; } void CclippingImageMFCDlg::coordinateConversion(CPoint *point,CPoint *out){ out->SetPoint((int)((float)point->x*scalex),(int)((float)point->y*scaley)); } void CclippingImageMFCDlg::coordinateConversion(CRect *rect,CRect *out){ out->SetRect((int)((float)rect->left*scalex),(int)((float)rect->top*scaley),(int)((float)rect->right*scalex),(int)((float)rect->bottom*scaley)); } void CclippingImageMFCDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。 pointConversion(&point); if(pictBoxRect.PtInRect(point)){ //タイトルバーの分下に下げる textFocus=false; CString str; coordinateConversion(¤tPoint,&realCurrentPoint); str.Format(L"座標値(%d,%d)",realCurrentPoint.x,realCurrentPoint.y); currentPositionText.SetWindowTextW(str); //描画するときはy座標をずらしたほうがよい if(drawFlag){ end=currentPoint; CString str; coordinateConversion(&end,&realend); SetDlgItemInt(IDC_ENDX,realend.x); SetDlgItemInt(IDC_ENDY,realend.y); } }//ptinrect CDialogEx::OnMouseMove(nFlags, point); } void CclippingImageMFCDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。 pointConversion(&point); if(pictBoxRect.PtInRect(point)){ //textFocus=false; begin=currentPoint; coordinateConversion(&begin,&realbegin); SetDlgItemInt(IDC_BEGINX,realbegin.x); SetDlgItemInt(IDC_BEGINY,realbegin.y); drawFlag=true; } CDialogEx::OnLButtonDown(nFlags, point); } void CclippingImageMFCDlg::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。 pointConversion(&point); if(pictBoxRect.PtInRect(point)){ textFocus=false; end=currentPoint; coordinateConversion(&end,&realend); SetDlgItemInt(IDC_ENDX,realend.x); SetDlgItemInt(IDC_ENDY,realend.y); }//ptinlect drawFlag=false; CDialogEx::OnLButtonUp(nFlags, point); } void CclippingImageMFCDlg::OnDestroy() { CDialogEx::OnDestroy(); } HBRUSH CclippingImageMFCDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); //// TODO: ここで DC の属性を変更してください。 // if (nCtlColor == CTLCOLOR_DLG) // { // if (*pWnd == *this) // { // // 背景色 // hbr = static_cast(GetStockObject(WHITE_BRUSH)); // } // } // TODO: 既定値を使用したくない場合は別のブラシを返します。 return hbr; } BOOL CclippingImageMFCDlg::PreTranslateMessage(MSG* pMsg) { // TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。 if(pMsg->message == WM_KEYDOWN) { switch(pMsg->wParam) { case VK_RETURN: //returnで終了しないでほしい return TRUE; // …… } } return CDialogEx::PreTranslateMessage(pMsg); } void CclippingImageMFCDlg::OnEnChangeBeginx() { if(textFocus){ realbegin.x=GetDlgItemInt(IDC_BEGINX); begin.x=(int)((float)realbegin.x/scalex); } if(flg){InvalidateRect(pictBoxRect,FALSE);} } void CclippingImageMFCDlg::OnEnChangeBeginy() { if(textFocus){ realbegin.y=GetDlgItemInt(IDC_BEGINY); begin.y=(int)((float)realbegin.y/scaley); } if(flg){InvalidateRect(pictBoxRect,FALSE);} } void CclippingImageMFCDlg::OnEnChangeEndx() { if(textFocus){ realend.x=GetDlgItemInt(IDC_ENDX); end.x=(int)((float)realend.x/scalex); } if(flg){InvalidateRect(pictBoxRect,FALSE);} // TODO: ここにコントロール通知ハンドラー コードを追加してください。 } void CclippingImageMFCDlg::OnEnChangeEndy() { if(textFocus){ realend.y=GetDlgItemInt(IDC_ENDY); end.y=(int)((float)realend.y/scaley); } if(flg){InvalidateRect(pictBoxRect,FALSE);} // TODO: ここにコントロール通知ハンドラー コードを追加してください。 } void CclippingImageMFCDlg::OnEnSetfocusBeginx() { textFocus=true; // TODO: ここにコントロール通知ハンドラー コードを追加します。 } void CclippingImageMFCDlg::OnEnSetfocusBeginy() { textFocus=true; // TODO: ここにコントロール通知ハンドラー コードを追加します。 } void CclippingImageMFCDlg::OnEnSetfocusEndx() { textFocus=true; // TODO: ここにコントロール通知ハンドラー コードを追加します。 } void CclippingImageMFCDlg::OnEnSetfocusEndy() { textFocus=true; // TODO: ここにコントロール通知ハンドラー コードを追加します。 } void CclippingImageMFCDlg::OnEnChangePrefix() { } void CclippingImageMFCDlg::OnBnClickedCsv() { // TODO: ここにコントロール通知ハンドラー コードを追加します。 csvcheck=!csvcheck; } void CclippingImageMFCDlg::OnBnClickedCheck1() { foldercheck=!foldercheck; }