분류 전체보기
- VS 정규식 2010.05.31 1
- VS 단축키 2010.05.31
- 프로세스 리스트 얻기 및 종료 2010.05.19 1
- 리스트 박스 색상 넣기 2010.05.13 1
- 마메 넷플 서버 2010.04.23
- VS 키보드 단축키 설정 2009.06.24 1
- 뻑났을 때 함수명 알려주기 2009.05.11
- 디버그 - 브레이크 포인터 강조하기! 2009.05.10 1
- Visual Studio 단축키 2008.11.25 1
- strstr()의 문제점과 해결책 제시 2008.11.24 1
VS 정규식
VS 단축키
프로세스 리스트 얻기 및 종료
bool CTotalUpdateDlg::GetProcessModule(DWORD dwPID,CString sProcessName)
{
HANDLE hModuleSnap = NULL;
MODULEENTRY32 me32 = {0};
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (hModuleSnap == (HANDLE)-1)
return (FALSE);
me32.dwSize = sizeof(MODULEENTRY32);
//해당프로세스의모듈리스트를루프로돌려서프로세스이름과동일하면
//true를리턴한다.
if(Module32First(hModuleSnap, &me32))
{
do
{
//printf("process name : %s\n", me32.szModule);
if(me32.szModule == sProcessName)
{
CloseHandle (hModuleSnap);
return true;
}
}
while(Module32Next(hModuleSnap, &me32));
}
CloseHandle (hModuleSnap);
return false;
}
bool CTotalUpdateDlg::ProcessKill( CString strProcessName )
{
HANDLE hProcessSnap = NULL;
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = {0};
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == (HANDLE)-1)
return false;
pe32.dwSize = sizeof(PROCESSENTRY32);
//프로세스가메모리상에있으면첫번째프로세스를얻는다
if (Process32First(hProcessSnap, &pe32))
{
BOOL bCurrent = FALSE;
MODULEENTRY32 me32 = {0};
do
{
bCurrent = GetProcessModule(pe32.th32ProcessID,strProcessName);
if(bCurrent)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
if(hProcess)
{
if(TerminateProcess(hProcess, 0))
{
unsigned long nCode; //프로세스종료상태
GetExitCodeProcess(hProcess, &nCode);
}
//printf("process exit\n");
CloseHandle(hProcess);
return true;
}
}
}
while (Process32Next(hProcessSnap, &pe32)); //다음프로세스의정보를구하여있으면루프를돈다.
}
CloseHandle (hProcessSnap);
return true;
}
리스트 박스 색상 넣기
#include "stdafx.h"
class CCustomListBox : public CListBox
{
public:
CCustomListBox()
{
m_rgbNormalText = RGB( 0, 0, 0 );
m_rgbNormalBack = RGB( 255, 255, 255);
m_rgbWarningText = RGB( 255, 0, 0 );
m_rgbWarningBack = RGB( 255, 255, 0 );
m_nHeight = 20;
m_szMargin = CRect(5, 0, 0, 0);
}
COLORREF m_rgbNormalText, m_rgbNormalBack; // 일반글자색과배경색
COLORREF m_rgbWarningText, m_rgbWarningBack; // 경고일때
UINT m_nHeight; // 셀의높이
CRect m_szMargin; // 글자의마진
int AddString(LPCTSTR lpszItem)
{
int n = CListBox::AddString( lpszItem );
SendMessage(WM_VSCROLL, SB_BOTTOM, NULL);
return n;
}
public:
virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
virtual void MeasureItem(LPMEASUREITEMSTRUCT /*lpMeasureItemStruct*/);
};
#include "ListBoxEx.h"
void CCustomListBox::DrawItem(LPDRAWITEMSTRUCT pDIStruct)
{
CDC dc;
// 코드를간결하게하기위하여전달된HDC를CDC에어태치한다.
if( !dc.Attach( pDIStruct -> hDC ) )
return;
// 현재전달된아이템이선택되어진넘인이확인한다.
if( pDIStruct -> itemState & ODS_SELECTED )
{
// 속성에맞게글자색, 배경색상을지정한다.
dc.SetTextColor((0x00FFFFFF & ~(GetSysColor(COLOR_WINDOWTEXT))));
dc.SetBkColor(GetSysColor(COLOR_HIGHLIGHT));
dc.FillSolidRect(&pDIStruct->rcItem, GetSysColor(COLOR_HIGHLIGHT));
}
else
{
dc.SetTextColor(m_rgbNormalText);
dc.SetBkColor(m_rgbNormalBack);
dc.FillSolidRect(&pDIStruct->rcItem, m_rgbNormalBack);
}
// 아이템의인덱스가-1이아니면
if(pDIStruct->itemID != -1)
{
// 선택된아이템의문자열을읽어온다.
CString m_SelText;
GetText(pDIStruct->itemID, m_SelText);
if( wcsstr( m_SelText, _T("[경고]") ) )
{
dc.SetTextColor(m_rgbWarningText);
dc.SetBkColor(m_rgbWarningBack);
dc.FillSolidRect(&pDIStruct->rcItem, m_rgbWarningBack);
}
// 만약선택된아이템이디저블속성이면글자색상을회색으로
if(pDIStruct->itemState & ODS_DISABLED)
dc.SetTextColor(::GetSysColor(COLOR_GRAYTEXT));
// 배경은투명속성으로
dc.SetBkMode(TRANSPARENT);
// 글자를그릴영역의여백을조절한다..
CRect rcText = pDIStruct->rcItem;
rcText.left += m_szMargin.left;
rcText.top += m_szMargin.top;
rcText.right -= m_szMargin.right;
rcText.bottom -= m_szMargin.bottom;
dc.DrawText(m_SelText, rcText, DT_VCENTER | DT_SINGLELINE);
}
dc.Detach();
}
void CCustomListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
lpMeasureItemStruct->itemHeight = m_nHeight;
}
마메 넷플 서버
VS 키보드 단축키 설정
뻑났을 때 함수명 알려주기
디버그 - 브레이크 포인터 강조하기!
도구 -> 옵션 -> 디버깅 -> 일반 -> 현재 문 및 중단점 텍스트에 색 적용
Visual Studio 단축키
단축키 | 설명 |
Ctrl + Tab | Edit하고 있는 Child Window 간의 이동 |
Ctrl + F4 | 현재 Edit하고 있는 Child Window를 닫기 |
Ctrl + I | 문자열 입력 점진적으로 문자열 찾기 (Incremental Search) |
Ctrl + F3 | 현재 커서에 있는 문자열 찾기 fowared (블록 지정 안 해도 됨) |
Ctrl + Shift + F3 | 현재 커서에 있는 문자열 찾기 backward |
F3 | 찾은 문자열에 대한 다음 문자열로 이동 (Next Search) |
Ctrl + H | 문자열 찾아 바꾸기 (Replace) |
Ctrl + Left/Right Arrow | 단어 단위로 이동 |
Ctrl + Delete 또는 Backspace | 단어 단위로 삭제 |
Ctrl + F2 | 현재 라인에 북마크 지정/해제 |
F2 | 지정된 다음 북마크로 이동 |
Ctrl + Shift + F2 | 지정된 모든 북마크를 해제 |
F9 | 현재 라인에 Breakpoint를 지정/해제 |
Ctrl + Shift + F9 | 현재 Edit하고 있는 소스파일에 지정된 모든 Breakpoint 해제 |
Ctrl + ] | '{'괄호의 짝을 찾아줌 ('{'에 커서를 놓고 눌러야 함} |
Ctrl + J, K | #ifdef 와 #endif의 짝을 찾아줌 |
Ctrl + L | 한 라인을 클립보드로 잘라내기 (Cut) |
Ctrl + Shift + L | 한 라인을 삭제 |
Alt + Mouse | 블록 설정 세로로 블록 설정하기 (마우스로) |
Ctrl + Shift + F8 | 세로로 블록 설정하기 (키보드로), 취소할 때는 Esc키를 눌러야 함 |
블록 설정 -> Tab | 선택된 블록의 문자열을 일괄적으로 들여쓰기(Tab) 적용 |
블록 설정 -> Shift + Tab | 선택된 블록의 문자열을 일괄적으로 내어쓰기 적용 |
Alt + F8 | 인덴트 정리. 범위 선택 후 사용하면 해당 범위를 표준 인덴트로 바꾸어줌. |
Shift + F9 | 디버그 모드에서 해당 변수를 바로 Watch Window에 등록. |
Ctrl + U | 선택된 영역을 소문자로 바꿈 |
Ctrl + Shift + U | 선택된 영역을 대문자로 바꿈 |
Ctrl + Shift + 8 | 문단기호 표시/감추기 : Tab은 ^, Space는 .으로 표시 |
Ctrl + D | 툴바의 찾기 Editbox로 이동 |
Ctrl + Up/Down Arrow | 커서는 고정시키고 화면만 스크롤 시키기 |
Shift + Alt + 커서 이동 Alt + 마우스 드래그 |
세로로 영역 선택 |
Shift + F12 | 선언으로 이동 |
strstr()의 문제점과 해결책 제시
이 문제점을 해결하기 위한 방법을 제시해본다. ㅋㅋ