본문 바로가기

MFC 인터페이스

MFC 몇가지 코드

// mfc 캡션 없는 창 마우스로 이동 시키기

 

UINT OnNcHitTest(CPoint point)
{
    UINT nHit = CDialog::OnNcHitTest(point);
    return (nHit == HTCLIENT ? HTCAPTION : nHit);
}

 

  // mfc 메시지 발생
PostMessage(WM_CLOSE) ; // 응용 프로그램 종료
ShowWindow(SW_MINIMIZE); // 최소화 버튼

 

// mfc 폼뷰의 배경 투명화
CtlColor 메시지 처리에서
return (HBRUSH)::GetStockObject(NULL_BRUSH);

// 폼뷰 배경색 지정

 return CreateSolidBrush(RGB(51,51,51));


 

// 버튼 이미지 삽입  ( CBitmapButton 으로 바꿔주고 )

m_btReport.LoadBitmaps(IDB_REPORT,IDB_REPORT2,IDB_REPORT,IDB_REPORT); // 레포트 버튼
 m_btReport.SizeToContent();

 

// 화면 둥글게
 CRect rect;
 CRgn rgn;
 GetClientRect(&rect);
 rgn.CreateRoundRectRgn(rect.left,rect.top,rect.right,rect.bottom,20,20);
 ::SetWindowRgn(this->m_hWnd,(HRGN)rgn,TRUE);

 

 

// 스태틱 텍스트 색상 변경 CtlColor ( OnCtlColor )
 switch(nCtlColor)
     {
     case CTLCOLOR_STATIC:
         {
             if(pWnd->GetDlgCtrlID() == IDC_STATIC)
             {
                 pDC->SetTextColor(RGB(255, 255, 255));
                 pDC->SetBkColor(RGB(51, 51, 51));
             }
         }
     }

 

// 객체 포인터 얻기
CSkinDialog* pFrame = (CSkinDialog*)AfxGetMainWnd();
  CAntiScanForm* scan = (CAntiScanForm*) pFrame->m_antiScanForm->GetActiveWindow();
  scan->FileScan();

 

// 리스트 컨트롤 에서  데이터 있는 영역의 마우스 우 클릭 팝업 메뉴 띄우기


 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
 CPoint CurrentPosition;
    ::GetCursorPos(&CurrentPosition);

    INT nIndex = -1;

    m_listSearch.ScreenToClient(&CurrentPosition);
    nIndex = m_listSearch.HitTest(CurrentPosition);

    if (-1 == nIndex)
    {
       // 아이템 없는 영역
    }
    else
    {
        // 아이템 영역에서 마우스 오른쪽 버튼을 선택한 경우
   CMenu menu;
            menu.LoadMenuA(IDR_MENU1);
            CMenu *p_subMenu = menu.GetSubMenu(0);

            CPoint p;
            GetCursorPos( &p );
   p_subMenu->TrackPopupMenu( TPM_RIGHTBUTTON , p.x,p.y,this);
           
   
            menu.DestroyMenu();
   
    }

 

// 리스트 컨트롤 행 / 열 단위 색상 지정 ( OnNMCustomdraw )

  case CDDS_ITEMPREPAINT | CDDS_SUBITEM:  // 행과 열 아이템에 대한 처리를 할 경우
           nRow = (int)lplvcd->nmcd.dwItemSpec;         // 행 인덱스를 가져옴
           nSub = (int)lplvcd->iSubItem;                       // 열 인덱스를 가져옴

    lplvcd->clrTextBk = RGB(94,94,94);   // 해당 행, 열 아이템의 배경색을 지정한다.
    lplvcd->clrText = RGB(255,255,255);  

 

// 리스트 컨트롤 addItem 함수

 LVITEM lvItem;
 lvItem.mask = LVIF_TEXT;
 lvItem.iItem= nItem;
 lvItem.iSubItem = nSubItem;
 lvItem.pszText = nData.GetBuffer();
 
 if(nSubItem == 0){
  m_report.InsertItem(&lvItem);
 }else{
  m_report.SetItem(&lvItem);
 }

 

 

 

// 리스트 컨트롤 초기화

 LVCOLUMN lvCol; // 컬럼 헤더
 TCHAR *list[1] ={_T(" data ")};
 int nWidth[1] = {628};

 
   //LVCOLUMN 멤버 지정 -> 컬럼 삽입
  lvCol.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
  lvCol.fmt = LVCFMT_CENTER; // 정렬 방식
  lvCol.cx = nWidth[0];
  lvCol.pszText = list[0];
  lvCol.iSubItem = 0;

  m_report.InsertColumn(0,&lvCol);

 

 

// 현재 날짜 얻기
 COleDateTime tmpTime;
 CString curDate;

 tmpTime = COleDateTime::GetCurrentTime();
 curDate = tmpTime.Format(_T("Date :  %Y-%m-%d"));
 

// 리스트 컨트롤 열 높이 지정하기

 CImageList m_image; // 열 높이 지정
 m_image.Create(1, 20, ILC_COLORDDB, 1, 0);
 
 m_report.SetImageList(&m_image, LVSIL_SMALL);

 

//레지스트리 해당 키 존재 여부 검색

HKEY hKey;
  if(RegOpenKey(HKEY_LOCAL_MACHINE,"S-1-5-21-*****-1000\\Software\cain",&hKey) ==ERROR_SUCCESS) // cain & abel
  {
   // 키 존재 AddItem 해줌
  }

 

//리스트 컨트롤 체크박스 값이 변경됨에 따라 이벤트 처리

:OnLvnItemchangedList1

 

if ( pNMLV->uChanged == LVIF_STATE )
  {
   UINT nOldCheck = pNMLV->uOldState & LVIS_STATEIMAGEMASK;
   UINT nNewCheck = pNMLV->uNewState & LVIS_STATEIMAGEMASK;

   if((nOldCheck & 0x1000 ) &&(nNewCheck & 0x2000)){
    
    CString text;
    m_lvCheckCnt ++;
    text.Format(_T("%d/%d"),m_lvCheckCnt,m_lvTotalCnt);
    SetDlgItemText(IDC_SCANCNT,text);
    
   }else if((nOldCheck & 0x2000) && (nNewCheck & 0x1000)){
     CString text;
     m_lvCheckCnt--;
     text.Format(_T("%d/%d"),m_lvCheckCnt,m_lvTotalCnt);
     SetDlgItemText(IDC_SCANCNT,text);
   }
   
  }