인생과 일 모두에서 성공하기 위해 반드시 일아야 할 것들
인생과 일 모두에서 성공하기 위해 반드시 일아야 할 것들
'reference' 카테고리의 다른 글
svn 능력자를 위한 git 개념 가이드 (0) | 2015.08.20 |
---|
hyeonk
hello world! hyeonk lab.
인생과 일 모두에서 성공하기 위해 반드시 일아야 할 것들
svn 능력자를 위한 git 개념 가이드 (0) | 2015.08.20 |
---|
[문제]
컴퓨터에서 실행 중인 Windows 7 SP1 이나 Windows Server 2008 R2 SP1 나 설치 하는 kb983246가 다시 컴파일하십시오 다음 ADO 응용 프로그램 하위 수준 운영 체제에서 실행 되지 않습니다.
http://support.microsoft.com/kb/2517589
[해결책]
#1. Windows 7 의 SP1 을 올리지 않는다. (권장 안함)
-> 현재 시스템 상 자동 업데이트 되고 있고, 개발을 위해서 업그레이드를 미루는 것은 문제가 있을 듯 합니다.
#2. 개인 PC의 ADO 버전을 강제로 내린다 (권장 안함 )
-> 문제가 있고 추후 상위 버전의 개발을 위해서도 바람직 하지 않습니다.
#3. ADO 버전을 고정 시킨다 (권장)
-> 현재 사용되는 msado15.dll 버전을 사용하지 않고 아래의 버전중에 하나를 사용한다.
- Vista 이상의 환경에서의 컴파일 : #import msado60.tlb (권장)
- XP 이상의 환경에서의 컴파일 : #import msado28.tlb (옵션)
AS-IS
#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename("EOF", "adoEOF")
TO-BE
#import "C:\Program Files\Common Files\System\ado\msado60.tlb" rename("EOF", "adoEOF")
[기타]
#. 해결책
http://support.microsoft.com/kb/2640696
#. ADO 버전
http://msdn.microsoft.com/ko-kr/library/windows/desktop/ms676506(v=vs.85).aspx
출처: http://cdecl.tistory.com/285
[강좌/메시지] WM_NOTIFY 메시지에 대해서...(ON_NOTIFY) - 2편 (0) | 2015.08.19 |
---|---|
[강좌/메시지] WM_NOTIFY 메시지에 대해서...(ON_NOTIFY) - 1편 (0) | 2015.08.19 |
BOOL PreTranslateMessage(MSG* pMsg) (0) | 2014.03.21 |
분할 윈도우 중 하나에 접근하는 방법 (0) | 2014.02.10 |
[MFC] SendMessage (0) | 2014.01.07 |
- 키 입력 처리를 할 수 있는 함수.
- 보통 엔터키나 ESC키를 눌렀을때 자동으로 OnOK()나 OnCancel()로 처리 되지만,
그전에 키 입력메세지를 사용자 정의로 처리하고 싶으면 이 함수를 쓰면 된다.
[-] Collapse
키 다운을 처리하려면 보통 위와 같은 방법으로 처리한다.
해당되는 키 값을 조건문에 넣고, 해야할 처리를 코딩 해주면 된다.
* 부모 다이얼로그에서 탭컨트롤을 이용한 자식 다이얼로그의 키입력 처리를 할때도 사용하면 된다.
부모 다이얼로그에서 탭컨트롤에 있는 자식 다이얼로그가 3개가 있다면,
해당 자식 다이얼로그에 포커스를 두고 엔터키나 ESC를 누르면, OnOk()나 OnCancel()로 메세지가 가버려서,
다이얼로그가 사라질 수가 있다. 그러면 탭 이동을 한뒤 다시 탭을 클릭해야 해당 다이얼로그가 나타나게 된다.
자, 그러면 아래와 같이 자식 다이얼로그 클래스에서 PreTranslateMessage()를 재정의 한 후
[-] Collapse
{
return FALSE; //처리 부분
//
return CDialog::PreTranslateMessage(pMsg);
}
return FALSE; 로 처리를 해주면 된다.
키 입력 메세지가 자식 다이얼로그에서 최종적으로 처리되기 이전에, PreTranslateMessage() 함수에서 처리를 할 수 있기 때문에
PreTranslateMessage()는 return TRUE; 가 되면, 더이상 메세지 처리가 되지 않고, 거기서 메세지 처리가 종결된다.
반면에 return FALSE; 가 되면, 자식 다이얼로그에서는 더이상 메세지 처리가 되지않고
부모 다이얼로그로 메세지가 넘어간다.
그러면, 부모 다이얼로그의 PreTranslateMessage() 함수나, OnOk(), OnCancel() 함수로 흐름이 이어지게 되어
부모 다이얼로그의 키 입력 처리대로 흘러간다.
부모 다이얼로그에서 탭컨트롤에 자식 다이얼로그를 붙일 경우,
이렇게 처리를 해주면, 자식 다이얼로그에서 ESC나 엔터키를 눌러도 자식 다이얼로그가 사라지거나 하는것을 방지하고, 부모 다이얼로그의 루틴대로 처리할 수 있다.
[강좌/메시지] WM_NOTIFY 메시지에 대해서...(ON_NOTIFY) - 1편 (0) | 2015.08.19 |
---|---|
#import msado15.dll이 소스에서 OS등에 따라 컴파일이 되지 않을 때 (0) | 2014.04.11 |
분할 윈도우 중 하나에 접근하는 방법 (0) | 2014.02.10 |
[MFC] SendMessage (0) | 2014.01.07 |
어플리케이션(MFC)에서 스레드 사용 및 주의사항 (필독!!) (0) | 2014.01.07 |
- 스플리터로 분할 윈도우를 구현했다면, 스플리터 객체를 이용해 해당 뷰의 포인터를 얻을 수 있다.
CRightListView *pView = (CRightListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitHor.GetPane(0, 1);
- 그리고 해당 뷰 포인터를 이용해 컨트롤 객체를 핸들링 하면 된다.
CString strItem = CLeftTreeCtrl::GetItemText(pNMTreeView->itemNew.hItem);
pView->m_RightListCtrl.SetItemText(1, 0, strItem);
#import msado15.dll이 소스에서 OS등에 따라 컴파일이 되지 않을 때 (0) | 2014.04.11 |
---|---|
BOOL PreTranslateMessage(MSG* pMsg) (0) | 2014.03.21 |
[MFC] SendMessage (0) | 2014.01.07 |
어플리케이션(MFC)에서 스레드 사용 및 주의사항 (필독!!) (0) | 2014.01.07 |
[MFC] MFC 팁 모음 (0) | 2013.06.28 |
출처: http://snoopybox.co.kr/1404
%0 | “C:\Users\snoopy\Desktop\예제.cmd” |
%~0 | C:\Users\snoopy\Desktop\예제.cmd |
%~d0 | C: |
%~p0 | \Users\snoopy\Desktop\ |
%~n0 | 예제 |
%~x0 | .cmd |
%~dp0 | C:\Users\snoopy\Desktop\ |
한글 | 영어 | 통합 |
O | O | O |
O | O | X |
O | X | O |
O | X | X |
더보기
Windows 7에 포함된 CMD 명령어 (0) | 2014.01.08 |
---|
Windows 7 CMD창에 남아있는 도스관련 명령어 모음
명령어 모음들을 모아본것이다. CMD창에 나가서 굳이 실행해야할 필요성이 있을까? 마우스 사용만을 고집한다면 필요 없을수 있겠지만, GUI환경으로 바뀌었다. 해도 이런 명령어들이 필요할때가 의외로 많을때가 있다. 인공지능적인 작업이 아닌 수작업을 통해서 뭔가를 복구해야 할 상황이 생길수도 있다라는 것이다. Windows 7에서 CMD창은 어떤 단축키에 의해서 호출된다기 보다는 CMD를 실행하거나, 아이콘을 선택하는 형태이므로 리눅스의 터미널 환경과 흡사해 보인다. 리눅스는 필요에 의해서 아예 그래픽모드를 벗어날수 있는 콘솔환경이 이 존재 하는데, 그래픽환경이 파괴되어 실행이 않될때, 기본모드인 콘솔형태로 부팅이된다. 하지만 Windows 7에서는 이런 기본모드 자체의 분리가 사실상은 불가능하다. 부팅시 기본모드로 부팅을 해도, GUI환경이 포함되어져 있다.
운영체제가 그래픽환경으로 바뀌면서 추가되어진 명령어는 TASKLIST,TASKKILL,DRIVERQUERY..등이다. DiskCopy명령어는 전통적으로 DOS에서 부터 있던 명령어로 현재에 와서는 시스템에 플로피드라이버의 환경을 점차적으로 지원하고 있지 않으므로 거의 쓸일이 없을수도 있다. 디스켓의 복사본을 만들때 필요한 것인데, 현재는 디스켓의 구매도 쉽지가 않다. 폴더를 생성할때,마우스 우축버튼을 이용해 만드는데, MKDIR을 통해 새로운 폴더를 원하는 위치에 만들수가 있다. 만들어진 폴더를 삭제한다면 RD명령어를 사용하면 된다.
CD는 원하는 폴더로 이동을 할때 사용하는데, 하위폴더까지 이동시 불편할수 있다. 이것을 대신할수 있는것이 일괄처리할수 있는 배치파일일 것이다. 그래픽 환경에서 할수있는 대부분의 상황을 이곳에서도 할수 있다고 보면된다. 각각의 명령어들은 보다 세부적으로 사용하려 할때,인자를 포함하여 적절히 이용하면된다.
SET 명령어는 환경변수등을 알고자 할때 이용한다.
C:\>set path
Path=C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;
C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Program Files (x86)\Common Files\Ulead Systems\MPEG;C:\Program Files (x86)\Qu
ickTime\QTSystem\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
C:\>
MORE는 단독적으로 실행되어 지지않고, 다른명령어에 하나의 인자처럼 사용한다. 램에 로드된 데몬들을 보고자 한다면 TASKLIST를 이용하면 되지만 한화면이상을 넘어가면 일일이 확인하기 힘들다.
tasklist |more 혹은 tasklist /p
COPY라는 명령어는 리눅스에서는 CP와 같은 역활을 하며 원하는 지점에서 원하는 목적지로 파일을 복사할수가 있다.
복사를 할때 *는 상당히 유용히 사용할수가 있다.
copy *.exe d:\
.
.
이런류의 명령어들은 외부에 실행파일로 있는것이 아니라 커널자체에 내부적으로 포함되어서 실행되어 지는것이므로 부팅하고 파괴된 그래픽환경을 복구하거나,싱글모드로 진입하여 거의 원시적인 작업을 할때 유효적절하다고 볼수 있다.
ASSOC 파일 확장명 연결을 보여주거나 수정한다.
ATTRIB 파일 속성을 표시하거나 바꾼다.
BREAK 확장된 CTRL+C 검사를 설정하거나 지운다.
BCDEDIT 부팅 로딩을 제어하기 위해 부팅 데이터베이스에서 속성을 설정한다.
CACLS 파일의 액세스 컨트롤 목록(ACL)을 표시하거나 수정한다.
CALL 한 일괄 프로그램에서 다른 일괄 프로그램을 호출한다.
CD 현재 디렉터리 이름을 보여주거나 바꾼다.
CHCP 활성화된 코드 페이지의 번호를 표시하거나 설정한다.
CHDIR 현재 디렉터리 이름을 보여주거나 바꾼다.
CHKDSK 디스크를 검사하고 상태 보고서를 표시한다.
CHKNTFS 부팅하는 동안 디스크 확인을 화면에 표시하거나 변경한다.
CLS 화면을 지운다.
CMD Windows 명령 인터프리터의 새 인스턴스를 시작한다.
COLOR 콘솔의 기본색과 배경색을 설정한다.
COMP 두 개 또는 여러 개의 파일을 비교한다.
COMPACT NTFS 분할 영역에 있는 파일의 압축을 표시하거나 변경한다.
CONVERT FAT 볼륨을 NTFS로 변환합니다. 현재 드라이브 변환할 수 없다.
COPY 하나 이상의 파일을 다른 위치로 복사한다.
DATE 날짜를 보여주거나 설정한다.
DEL 하나 이상의 파일을 지운다.
DIR 디렉터리에 있는 파일과 하위 디렉터리 목록을 보여준다.
DISKCOMP 두 플로피 디스크의 내용을 비교한다.
DISKCOPY 플로피 디스크의 내용을 다른 플로피 디스크로 복사한다.
DISKPART 디스크 파티션 속성을 표시하거나 구성한다.
DOSKEY 명령줄을 편집하고, Windows 명령을 다시 호출하고, 매크로를 만든다.
DRIVERQUERY 현재 장치 드라이버 상태와 속성을 표시한다.
ECHO 메시지를 표시하거나 ECHO를 사용 또는 사용하지 않는다.
ENDLOCAL 배치 파일에서 환경 변경의 지역화를 끝낸다.
ERASE 하나 이상의 파일을 지운다.
EXIT CMD.EXE 프로그램(명령 인터프리터)을 마친다.
FC 두 파일 또는 파일의 집합을 비교하여 다른 점을 표시한다.
FIND 파일에서 텍스트 문자열을 찾는다.
FINDSTR 파일에서 문자열을 찾는다.
FOR 파일 집합에서 각 파일에 대해 지정된 명령을 실행한다.
FORMAT Windows에서 사용할 디스크를 포맷한다.
FSUTIL 파일 시스템 속성을 표시하거나 구성한다.
FTYPE 파일 확장 연결에 사용되는 파일 형식을 표시하거나 수정한다.
GOTO Windows 명령 인터프리터가 일괄 프로그램에서 이름표가 붙여진 줄로 이동한다.
GPRESULT 컴퓨터 또는 사용자에 대한 그룹 정책 정보를 표시한다.
GRAFTABL Windows가 그래픽 모드에서 확장 문자 세트를 표시할수 있게 한다.
HELP Windows 명령어에 관한 도움말을 제공한다.
ICACLS 파일과 디렉터리에 대한 ACL을 표시, 수정, 백업 또는복원한다.
IF 일괄 프로그램에서 조건 처리를 수행한다.
LABEL 디스크의 볼륨 이름을 만들거나, 바꾸거나, 지운다.
MD 디렉터리를 만든다.
MKDIR 디렉터리를 만든다.
MKLINK 기호화된 링크와 하드 링크를 만든다.
MODE 시스템 장치를 구성한다.
MORE 출력을 한번에 한 화면씩 표시한다.
MOVE 하나 이상의 파일을 한 디렉터리에서 다른 디렉터리로 옮긴다.
OPENFILES 파일 공유에서 원격 사용자에 의해 열린 파일을 표시한다.
PATH 실행 파일의 찾기 경로를 보여주거나 설정한다.
PAUSE 배치 파일의 처리를 보류하고 메시지를 보여준다.
POPD PUSHD 명령으로 저장된 디렉터리로 바꾼다.
PRINT 텍스트 파일을 인쇄한다.
PROMPT Windows 명령 프롬프트를 바꾼다.
PUSHD 현재 디렉터리를 저장한 후 디렉터리를 바꾼다.
RD 디렉터리를 지운다.
RECOVER 불량이거나 결함이 있는 디스크에서 읽을 수 있는 정보를 복구한다.
REM 배치 파일 또는 CONFIG.SYS에서 주석을 기록한다.
REN 파일 이름을 바꾼다.
RENAME 파일 이름을 바꾼다.
REPLACE 파일을 대체한다.
RMDIR 디렉터리를 지운다.
ROBOCOPY 파일과 디렉터리 트리를 복사할 수 있는 고급 유틸리티이다.
SET Windows 환경 변수를 보여주거나, 설정하거나, 지운다.
SETLOCAL 배치 파일에서 환경 변경의 지역화를 시작한다.
SC 서비스를 표시하거나 구성한다(백그라운드 작업).
SCHTASKS 컴퓨터에서 실행할 명령과 프로그램을 예약한다.
SHIFT 배치 파일에서 바꿀 수 있는 매개 변수의 위치를 바꾼다.
SHUTDOWN 컴퓨터의 로컬 또는 원격 종료를 허용한다.
SORT 입력을 정렬한다.
START 지정된 프로그램이나 명령을 별도의 창에서 시작한다.
SUBST 경로를 드라이브 문자로 지정한다.
SYSTEMINFO 특정 컴퓨터의 속성과 구성을 표시한다.
TASKLIST 서비스를 포함한 실행 중인 모든 작업을 표시한다.
TASKKILL 실행 중인 프로세스나 응용 프로그램을 중지한다.
TIME 시스템 시간을 보여주거나 설정한다.
TITLE CMD.EXE 세션에 대한 창의 창 제목을 설정한다.
TREE 드라이브 또는 경로의 디렉터리 구조를 그래픽으로 화면에 표시함.
TYPE 텍스트 파일의 내용을 보여준다.
VER Windows 버전을 보여준다.
VERIFY 파일이 디스크에 올바로 쓰였는지 검증할지 여부를 지정한다.
VOL 디스크 볼륨 이름과 일련 번호를 보여준다.
XCOPY 파일과 디렉터리 트리를 복사한다.
WMIC 대화형 명령 셸 내의 WMI 정보를 표시한다.
출처: http://blog.naver.com/hwang_jt/130132351399
배치파일 기초 작성법 (0) | 2014.01.08 |
---|
클래스간 데이터 전달을 하는 방법이 무엇이 있을까.
1 2 3 4 5 6 7 8 9 10 11 12 | LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 ) throw (); static LRESULT SendMessage( HWND hWnd, UINT message, // 메시지 이름 WPARAM wParam, // 정수형 포인터 전달인자 LPARAM lParam // 실수형 포인터 전달인자 ) throw (); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | BEGIN_MESSAGE_MAP(CsendMessageDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDOK, &CsendMessageDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1, &CsendMessageDlg::OnBnClickedButton1) ON_MESSAGE(UM_TEST_SENDMESSAGE, &CsendMessageDlg::sets) // 1. 메시지 등록 END_MESSAGE_MAP() LRESULT CsendMessageDlg::sets( WPARAM wParam, LPARAM lParam) // 2. 처리함수 정의 { CString *data = (CString*)lParam; // 이렇게 받아옴. 왜냐하면 lParam 은 포인터니까!! CString을 넘긴 주소를 가리키고 있다. ::MessageBox(NULL, _T( "asdf" ), ( LPCWSTR )data, MB_OK); // 이건 그냥 확인용 } |
1 | #define UM_TEST_SENDMESSAGE WM_USER +1 // 메시지 구별자 등록 |
1 2 3 4 5 6 7 8 9 10 11 | BOOL CModaless::OnInitDialog() { CDialog::OnInitDialog(); CString *str = new CString( "asdf" ); ::SendMessage(((CSendMessageDlg*)GetParent())->GetSafeHwnd(), UM_TEST_SENDMESSAGE, 0, ( LPARAM )str); // ((CSendMessageDlg*)GetParent())->GetSafeHwnd() : 상위 Dialog의 핸들을 가져옴 // 만약 하위 Dialog에게 보내려면 하위 Dialog의 객체에 sendMessage를 던져주면된다. // 그땐 주소(hWnd가 필요없다. :D) // 3. 메시지 전달 return TRUE; } |
BOOL PreTranslateMessage(MSG* pMsg) (0) | 2014.03.21 |
---|---|
분할 윈도우 중 하나에 접근하는 방법 (0) | 2014.02.10 |
어플리케이션(MFC)에서 스레드 사용 및 주의사항 (필독!!) (0) | 2014.01.07 |
[MFC] MFC 팁 모음 (0) | 2013.06.28 |
Win32Api에서 x64(64비트) Application을 개발할때의 주의점들 (0) | 2013.04.15 |
1. 크기(size) 및 효율성(performance)의 이유로 MFC 객체(Object)는 스레드에 안전한 구조가 아니다.
2. MFC 객체에 접근(Access)하기 위해서는 CWinThread 객체를 사용한 스레드여야 한다. (User-Interface Thread, Worker Thread)
- User-Interface Thread와 Worker Thread의 차이 : User-Interface Thread는 스레드 자체의 메시지 큐를 가지며 일반적으로 UI를 포함한다.
3. 일반적인 규칙으로 MFC 객체는 그것을 생성한 스레드에서만 접근할 수 있다. MFC는 윈도우 핸들과 윈도우 객체를 연결하는
맵(Windows Handle Maps)을 가지는데 이것은 스레드의 로컬 영역에 저장되기 때문이다.
- Worker Thread에서 CDocument의 UpdateAllViews 나 CView의 UpdateWindow 등을 호출해도 뷰는 업데이트 되지 않는다.
- Worker Thread에서 AfxGetMainWnd 등을 호출하면 NULL이 반환된다.
- Worker Thread에서 CDialog의 UpdateData 등을 호출하면 ASSERT 에러가 난다.
- Worker Thread에서 UI를 직접 접근할 경우 Dead lock에 빠질 수 있다.
4. SendMessage와 PostMessage의 차이를알자.
- SendMessage를 호출하면 윈도우의 메시지 프로시저를 바로 호출해서 결과를 리턴 받는다.
- PostMessage를 호출하면 메시지가 시스템 메시지 큐에 보내지고 호출한 함수는 바로 리턴이 된다.
시스템은 해당 윈도우 스레드의 메시지 큐에 메시지를 보내고 메시지가 처리된다.
- 따라서 Worker Thread에서 SendMessage를 호출하면 Worker Thread에서 메시지 핸들러를 호출하게 되는것이고
PostMessage를 호출하면 메인 Thread에서 메시지 핸들러를 호출하게 되는것이다.
[MFC 어플리케이션에서 Worker Thread를 사용할 경우 지켜야 할 규칙]
1. UI에 대한 접근은 UI를 생성한 클래스에서만 한다. (Worker Thread에서 UI 접근 함수를 직접 호출하지 않는다.)
2. 메인 스레드와 서브 스레드(Worker Thread)에서 동시에 접근하는 Data는 최대한 줄인다.
3. 서브 스레드(Worker Thread)에서 처리한 작업은 사용자 메시지를 만든 후 PostMessage로 보내서 메인 스레드에서
처리할 수 있도록 한다.
출처: http://blog.naver.com/ultimidou/130096322389
[출처] 어플리케이션(MFC)에서 스레드 사용 및 주의사항 (필독!!)|작성자 울티미도우
[출처] 어플리케이션(MFC)에서 스레드 사용 및 주의사항 (필독!!)|작성자 울티미도우
분할 윈도우 중 하나에 접근하는 방법 (0) | 2014.02.10 |
---|---|
[MFC] SendMessage (0) | 2014.01.07 |
[MFC] MFC 팁 모음 (0) | 2013.06.28 |
Win32Api에서 x64(64비트) Application을 개발할때의 주의점들 (0) | 2013.04.15 |
CString 형변환 Programming (0) | 2013.02.13 |
■ [ECLIPSE란?] Eclipse단축키모음
▒ Ctrl & F11 ☞ 이전 실행 Run파일 실행.
▒ Ctrl & Shift & B ☞ 현제 커서 위치에 브레이크 포인터 설정 및 해제
▒ F11 ☞ 디버깅 시작
▒ F8 ☞ 디버깅 계속
▒ Ctrl & R☞ 현재 라인까지 실행(Run to Line)
▒ F6 ☞ 한 줄씩 실행(Step Over)
▒ F5☞ 한 줄씩 실행하되 함수일 경우 그 함수 내부로 들어감(Step Into)
▒ F7 ☞ Step Return
▒ Ctrl & F2 ☞ 프로그램 종료
<!--[if !supportEmptyParas]--> <!--[endif]-->
<!--[if !supportEmptyParas]--> <!--[endif]-->
■ Editor 단축키(소스 추가, 수정, 이동, 삭제, 정렬 등)
▒ Ctrl & D Delete Line - 줄 삭제
▒ Ctrl & Alt & UP or DOWN ☞ Duplicate Lines - 줄 복사
▒ Ctrl & Shift & ENTER ☞ Insert Line Above Current Line - 현재 줄에 새로 추가
▒ Shift & ENTER ☞ Insert Line Below Current Line - 다음 줄에 새로 추가
▒ Ctrl & N ☞ 새로운 파일 및 프로젝트 생성.
▒ Ctrl & / or \☞ Toggle Comment - 한줄 주석 및 해제
▒ Ctrl & Shift & / or \☞ 블럭 주석 설정 및 해제
▒ Ctrl & Shift & F☞ 코드 자동 정리(선택한 블록을 자동으로 줄을 정렬함)
▒ Ctrl & I ☞ Indent Line - 제대로 된 위치의 들여쓰기
▒ Ctrl & Shift & F ☞ Format - 탬플릿에 지정된 대로 코드 포맷 변경
▒ Ctrl & Shift & M☞ 특정 클래스 Import 시키기
▒ Ctrl & Shift & O ☞ Organize Imports - 필요없는 import 제거
▒ Alt & Shift & J ☞ Add Javadoc Comment - Javadoc타입의 주석 붙임
▒ Alt & Shift & UP or Down☞ 커서를 기준으로 토큰단위 블록지정 및 해제
▒ Alt & Shift & J☞ 자동으로 주석 달기 (메소드나 멤버변수에 포커스 두고 실행)
▒ Alt & Shift & Z ☞ Surround With 메뉴 표시
▒ Alt & Shift & S ☞ Source Quick Menu - 빠른 소스메뉴
▒ Ctrl & M ☞ Maximize Active View or Editor - 선택된 뷰 최대화
▒ Ctrl & Shift & S ☞ 모두 저장
▒ Ctrl & Shift & W ☞ 모두 닫기
▒ Ctrl & Shift & R ☞ 자원 열기
▒ Ctrl & Shift & Y ☞ 대문자를 소문자로
▒ Ctrl & Shift & X ☞ 소문자를 대문자로
▒ Ctrl & Shift & E ☞ 커서에서 줄 끝가지 삭제
▒ Ctrl & Shift & F ☞ 코드 자동 정리
■ Assist 및 comment 단축키(Quick Fix 등 도움을 주는 기능들)
▒ Ctrl & Space ☞ Content Assist - 코드 작성을 도와준다. 자동완성을 지원함
▒ Ctrl & Shift & Space ☞ Parameter 힌트 표시
▒ Ctrl & 1☞ Quick Fix. 에러가 발생했을 경우 Quick Fix를 통해 쉽게 해결이 가능하다.
▒ Ctrl & . or , ☞ 다음/이전 어노테이션(에러, 경고)으로 이동
▒ F12 ☞ 컴파일 중 에러등으로 포커스가 다른데로 갔을 때 Editor 로 커서 이동
▒ sysout & Ctrl & Space ☞ System.out.println() 자동 완성
▒ try & Ctrl & Space ☞ try{}catch(){} 자동 완성
▒ for & Ctrl & Space ☞ for문 자동 완성
■ Find(찾기)
▒ Ctrl & F ☞ 찾기/바꾸기
▒ Ctrl & H ☞ 자바의 클래스, 타입, 함수 이름 등으로 찾을 수 있다. Search 다이얼로그 표시
▒ Ctrl & J & next(Down, Up) ☞ 점층적 찾기
▒ Ctrl & Shift & J ☞ 역으로 점층적 찾기
▒ Ctrl & Shift & G☞ 특정 메써드나 필드를 Reference하고 있는 곳을 찾는다.
▒ Ctrl & K ☞ Selection Word Search - 선택한 문자열과 동일한 다음 문자열 찾기
▒ Ctrl & Shift & K ☞ 선택한 문자열과 동일한 이전 문자열 찾기
▒ Ctrl & Shift & T ☞ 클래스 찾기(Open Type 다이얼로그 표시)
■ Move(이동)
▒ Ctrl & L☞ 특정 줄번호로 가기
▒ Ctrl & Shift & P ☞ 매칭되는 괄호로 이동
▒ F3 ☞ 선택한 요소의 선언된 곳으로 이동
▒ Ctrl & PgUp or PgDn ☞ 다음/이전 에디터를 활성화
▒ Ctrl & F6 ☞ 다음 에디터로 이동(Ctrl & Tab 기능)
▒ Ctrl & RIGHT ☞ Next Word - 다음 문자로 이동
▒ Ctrl & LEFT ☞ Previous Word - 이전 문자로 이동
▒ Ctrl & Q ☞ 가장 최근 편집한 위치로 이동(단축키로 이동했을 때, 이전 작업으로 돌아가기)
▒ Ctrl & E ☞ 다음 에디터로 이동
▒ Ctrl & Shift & F5 ☞ 이전 에디터로 이동
▒ Ctrl & Shift & E ☞ Switch to Editor - 열려있는 에디터간 이동
▒ Ctrl & F8 ☞ 다음 Perspective로 이동(java->javaEE->SVN->...)
▒ Ctrl & Shift & F8 ☞ 이전 Perspective로 이동(java->javaEE->SVN->...)
▒ Alt & <- ☞ 이전 작업 화면
▒ Alt & -> ☞ 다음 작업 화면
▒ Ctrl & F7 ☞ 다음 View로 이동.(Package Explorer->Editor->Explorer->...)
▒ Ctrl & Shift & F7 ☞ 이전 View로 이동.
▒ Ctrl & Shift & Up or Down ☞ 클래스의 이전(또는 다음) 맴버로 이동
▒ F10 ☞ 메뉴창을 활성화
■ View(트리 및 단축키 등 구조 보기)
▒ Ctrl & Shift & L ☞ 단축키 보기 (한 번 더 누르면 키 설정메뉴로 들어감)
▒ Ctrl & Alt & H ☞ 메서드 호출 구조 표시
▒ F4 ☞ Open Type Hierarchy - 현재 클래스의 상속관계를 보여주는 창이 열린다.
▒ Ctrl & T ☞ Quick Hierarchy - 간단하게 현재 클래스의 상속 관계를 보여준다.
▒ Ctrl & O ☞ Quick Outline - 현재 클래스의 메서드, 맴버변수등을 보여준다.
■ Refactoring 단축키
▒ Alt & Shift & T ☞ Refactor Quick Menu - 리펙토링 메뉴 바로가기
▒ Alt & Shift & R☞ 이름 변경(Rename)
▒ Alt & Shift & V ☞ 이동(Move)
▒ Alt & Shift & C ☞ Change Method Signature
▒ Alt & Shift & M ☞ Extract Method
▒ Alt & Shift & L ☞ Extract Local Variable
▒ Alt & Shift & I ☞ Inline
■ 기타 힌트
▒ Eclipse 단축키 확인 및 변경
Eclipse의 모든 단축키는 Window >> Preferences >> Workbench >> Keys 메뉴에서 확인 및 변경이 가능합니다. 그 동안 다른 툴에서 자신의 손에 익숙한 단축키들이 있다면 이 메뉴에서 단축키들을 변경하는 것이 가능합니다.
<!--[if !supportEmptyParas]--> <!--[endif]-->
▒ 이클립스 단축키 저장 파일
%workspace%\.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.ui.workbench.prefs
<!--[if !supportEmptyParas]--> <!--[endif]-->
이클립스 에디터 클릭시 패키지익스플로러에서 경로를 자동으로 찾아가게 하시려면
탐색트리 상단 우편에 드답다운메뉴 클릭하시고 link with editor 체크해주시면 됩니다
참조: http://majorss.tistory.com/29
- 함수 주석 매크로
' Usage : 함수를 모두 선택(ex : int GetLength(char strArr[]))후 매크로 실행
- 클래스 주석 매크로
' Usage : 클래스 이름을 선택(ex : class MyTest : public base)후 매크로를 실행
Option Strict Off
Option Explicit Off
'Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports Microsoft.VisualBasic
Imports Microsoft.VisualBasic.ControlChars
Public Module MyModule
Dim ParamArr() As String
Dim previousSelection As String
Dim completionWords As String
Dim completionWordsIndex As Integer
Function StripTabs(ByVal MyStr As String)
' 앞에 있는 탭 공백을 제거합니다.
While InStr(MyStr, Microsoft.VisualBasic.ControlChars.Tab) > 1
MyStr = Right(MyStr, Len(MyStr) - InStr(MyStr, CStr(Microsoft.VisualBasic.ControlChars.Tab)))
End While
StripTabs = Trim(MyStr)
End Function
Sub AddFunctionComment()
' 설명: 현재 선택된 C/C++ 함수 프로토타입의 주석 블록을 만듭니다.
Dim Header, prms As String
Dim fcName, Descr As String
Dim iPrm, iPrmA As Integer
Dim selection As EnvDTE.TextSelection
Dim RetTp As String
' 이 파일 전체에서 DTE.ActiveDocument.Selection이
' DTE.ActiveDocument.Selection.Text 대신 사용됩니다. 이 둘은
' 동일하므로 서로 바꿔 사용할 수 있습니다. 이 둘이 같은 이유는 Text가
' 사용할 기본 속성으로 간주되기 때문입니다. 다른 속성 없이
' ActiveDocument.Selection을 사용하면 기본적으로 Text 속성이
' 사용됩니다.
If (DTE.ActiveDocument Is Nothing) Then
Exit Sub
End If
If DTE.ActiveDocument.Language = EnvDTE.Constants.dsCPP Or DTE.ActiveDocument.Language = "CSharp" Then
selection = DTE.ActiveDocument.Selection()
Trim(selection.Text)
Header = ""
If selection.Text <> "" Then
Header = StripTabs(Trim(selection.Text))
End If
' 함수 반환 형식을 가져옵니다.
If Header <> "" Then
If DTE.ActiveDocument.Language = "CSharp" Then
' public/private 등과 같은 보호 정보를 건너뜁니다.
Header = Right(Header, Len(Header) - InStr(Header, " "))
End If
Reti = InStr(Header, " ")
Loc1 = InStr(Header, "(")
If Reti < Loc1 Then
RetTp = Left(Header, Loc1 - 1)
Header = Right(Header, Len(Header) - Reti)
End If
RetTp = Left(RetTp, InStr(RetTp, " "))
' 함수 이름을 가져옵니다.
Loc1 = InStr(Header, "(") - 1
Loc2 = InStr(Header, ")")
If Loc1 > 0 And Loc2 > 0 Then ' '(' 및 ')'가 있는지 확인합니다.
fcName = Left(Header, Loc1)
Header = Right(Header, Len(Header) - Len(fcName))
' 반환 형식에 저장소 형식이 있는지 여부
Trim(fcName)
If InStr(fcName, " ") <> 0 Then
RetTp = RetTp + Left(fcName, InStr(fcName, " "))
fcName = Right(fcName, Len(fcName) - InStr(fcName, " "))
End If
' 함수 매개 변수를 가져옵니다.
iPrm = 0
iPrmA = 0
prms = Header
' 매개 변수 개수를 계산합니다.
Do While InStr(prms, ",") <> 0
iPrm = iPrm + 1
prms = Right(prms, Len(prms) - InStr(prms, ","))
Loop
' 배열에 매개 변수 목록을 저장합니다.
If iPrm > 0 Then ' 매개 변수가 여러 개인 경우입니다.
iPrm = iPrm + 1
iPrmA = iPrm
ReDim ParamArr(iPrm)
Do While InStr(Header, ",") <> 0
ParamArr(iPrm - 1) = Left(Header, InStr(Header, ",") - 1)
' 첫 번째 매개 변수에서 중괄호를 제거합니다.
If InStr(ParamArr(iPrm - 1), " (") <> 0 Then
ParamArr(iPrm - 1) = Right(ParamArr(iPrm - 1), (Len(ParamArr(iPrm - 1)) - (Len(ParamArr(iPrm - 1)) - (Len(ParamArr(iPrm - 1)) - InStr(ParamArr(iPrm - 1), " (")))))
Trim(ParamArr(iPrm))
End If
Header = Right(Header, Len(Header) - InStr(Header, ","))
iPrm = iPrm - 1
Loop
ParamArr(iPrm - 1) = Header
' 마지막 매개 변수에서 닫는 중괄호를 제거합니다.
If InStr(ParamArr(iPrm - 1), ")") <> 0 Then
ParamArr(iPrm - 1) = Left(ParamArr(iPrm - 1), InStr(ParamArr(iPrm - 1), ")") - 1)
Trim(ParamArr(iPrm - 1))
End If
Else ' 대부분 매개 변수가 하나인 경우입니다.
ReDim ParamArr(1)
Header = Right(Header, Len(Header) - 1) ' 첫 번째 중괄호를 제거합니다.
Trim(Header)
ParamArr(0) = StripTabs(Header)
If InStr(ParamArr(0), ")") <> 1 Then
ParamArr(0) = Left(ParamArr(0), InStr(ParamArr(0), ")") - 1)
Trim(ParamArr(0))
iPrmA = 1
End If
End If
' 선택한 텍스트의 한 줄 위에 커서를 둡니다.
DTE.ActiveDocument.Selection.LineUp()
DTE.ActiveDocument.Selection.LineDown()
DTE.ActiveDocument.Selection.StartOfLine()
selection = DTE.ActiveDocument.Selection()
'selection.text = Lf
Descr = CStr(Lf) + "//////////////////////////////////////////////////////////////////////////" + CStr(Lf)
Descr = Descr + "/// @Function Name : " + fcName + CStr(Lf)
Descr = Descr + "/// @Description : " + CStr(Lf)
Descr = Descr + "/// @Return Type : " + RetTp + Chr(9) + "-> (설명)" + CStr(Lf)
' 매개 변수 목록을 인쇄합니다.
Last = iPrmA
Do While iPrmA <> 0
' 모든 argumentextSelection에서 줄 바꿈을 제거합니다.
If InStr(ParamArr(iPrmA - 1), CStr(Lf)) <> 0 Then
ParamArr(iPrmA - 1) = Right(ParamArr(iPrmA - 1), (Len(ParamArr(iPrmA - 1)) - (Len(ParamArr(iPrmA - 1)) - (Len(ParamArr(iPrmA - 1)) - InStr(ParamArr(iPrmA - 1), CStr(Lf))))))
Trim(ParamArr(iPrmA - 1))
End If
ParamArr(iPrmA - 1) = StripTabs(ParamArr(iPrmA - 1))
' 매개 변수가 둘 이상인 경우 첫 번째 매개 변수의 앞에
' '('가 붙어 있게 됩니다. 여기에서 이를 제거합니다.
If iPrmA = Last And Last <> 1 Then
ParamArr(iPrmA - 1) = Right(ParamArr(iPrmA - 1), Len(ParamArr(iPrmA - 1)) - 1)
End If
Descr = Descr + "/// @Parameter : " + ParamArr(iPrmA - 1) + Chr(9) + "-> (설명)" + CStr(Lf)
iPrmA = iPrmA - 1
Loop
Descr = Descr + "/// @Author : Seung Hyeon Kim" + CStr(Lf)
selection = DTE.ActiveDocument.Selection()
selection.Text = Descr
Else
MsgBox("It is possible that the function you are trying to work with has a syntax error.")
End If
End If
Else
MsgBox("You need to have an active C/C++ document open" + CStr(Lf) + "with the function prototype selected.")
End If
End Sub
Sub AddSimpleFunctionComment()
' 설명: 현재 선택된 C/C++ 함수 프로토타입의 기능설명 주석 블록을 만듭니다.
Dim selection As EnvDTE.TextSelection
' 선택한 텍스트의 한 줄 위에 커서를 둡니다.
DTE.ActiveDocument.Selection.LineUp()
DTE.ActiveDocument.Selection.LineDown()
DTE.ActiveDocument.Selection.StartOfLine()
selection = DTE.ActiveDocument.Selection()
Descr = CStr(Lf) + "//////////////////////////////////////////////////////////////////////////" + CStr(Lf)
Descr = Descr + "/// @기능설명 : " + CStr(Lf)
Descr = Descr + "//////////////////////////////////////////////////////////////////////////" + CStr(Lf)
selection = DTE.ActiveDocument.Selection()
selection.Text = Descr
End Sub
Sub AddClassComment()
' 설명: 현재 선택된 C/C++ 함수 프로토타입의 주석 블록을 만듭니다.
Dim CName As String
Dim selection As EnvDTE.TextSelection
' 이 파일 전체에서 DTE.ActiveDocument.Selection이
' DTE.ActiveDocument.Selection.Text 대신 사용됩니다. 이 둘은
' 동일하므로 서로 바꿔 사용할 수 있습니다. 이 둘이 같은 이유는 Text가
' 사용할 기본 속성으로 간주되기 때문입니다. 다른 속성 없이
' ActiveDocument.Selection을 사용하면 기본적으로 Text 속성이
' 사용됩니다.
If (DTE.ActiveDocument Is Nothing) Then
Exit Sub
End If
If DTE.ActiveDocument.Language = EnvDTE.Constants.dsCPP Or DTE.ActiveDocument.Language = "CSharp" Then
selection = DTE.ActiveDocument.Selection()
Trim(selection.Text)
CName = StripTabs(Trim(selection.Text))
' 선택한 텍스트의 한 줄 위에 커서를 둡니다.
DTE.ActiveDocument.Selection.LineUp()
DTE.ActiveDocument.Selection.LineDown()
DTE.ActiveDocument.Selection.StartOfLine()
Descr = CStr(Lf) + "//////////////////////////////////////////////////////////////////////////" + CStr(Lf)
'Descr = Descr + "/**" + CStr(Lf)
Descr = Descr + "/// @Class Name : " + CName + CStr(Lf)
Descr = Descr + "/// @Description : " + CStr(Lf)
Descr = Descr + "/// @Author : Seung Hyeon Kim" + CStr(Lf)
Descr = Descr + "/// @Warning : " + CStr(Lf)
Descr = Descr + "/// @Date : " + System.DateTime.Now.ToShortDateString() + CStr(Lf)
'Descr = Descr + "*/" + CStr(Lf)
selection = DTE.ActiveDocument.Selection()
selection.Text = Descr
Else
MsgBox("It is possible that the class you are trying to work with has a syntax error.")
End If
End Sub
End Module
Visual Studio 단축키 활용하기 (0) | 2013.01.21 |
---|