다이얼로그로 대화창을 만들고, 에디트 버튼이나, 기타 엔터키 입력을 받는 콘트롤을 올려 놓을 경우에, 다이얼로그에서 먼져 엔터키를 받아서 OnOK();가 호출되어 걍 ~~ 죽죠. 이 부분을 막아 보겠습니다. 1. 리소스 부분에서 IDOK 부분을 다른 리소스로 변환합니다. IDOK -- > IDC_BUTTON_ACCEPT #define IDC_BUTTON_ACCEPT 1150 //(이건 Resource.h에 있음) 2. IDC_BUTTON_ACCEPT의 핸들러 OnAccept();를 만들죠.. void CConfigDlg::OnAccept() { // Add code here.. CDialog::OnOK(); } 3. 그 핸들러에 IDOK 의 디폴트 핸들러를 호출합니다. (위에서 같이요: CDialog::..
버튼 모양을 맘대로 만들어 줄 때.. Bitmap으로 바꿔주기 위해 사용한다. Owner Draw라는 기법(?)인데 Combo, List, Button에 사용한다. 버튼으로 예를 들면 Dialog에 Button을 그린 후 Add Variation해서 CButton으로 등록한다. 이름을 m_btnTest로 했으면 CButton m_btnTest로 돼있을텐데 여기서 CButton을 강제로 CBitmapButton으로 바꿔준다. (CButton을 상속받은 클래스이다.) 버튼의 4가지 상태를 등록할 수 있는데, 가만히 있을때(U), 눌렸을 때(D), 포커스가 갔을때(F), 무효됐을때(D) 이렇게 4가지이다. 각각의 Bitmap을 Resource에 import한다. 그 후 OnInitDialog() 함수에다가 아..
사소하지만 자주 쓰이는 것들. 예를 들어 Doc/View간에 서로 핸들 얻기, DLL 함수 정의, 각 컨트롤 사용하기(List, Progress Bar 등), 창 크기 및 위치 정보 구하기 등을 적어놓았음. 1. DC얻기 CClientDC dc(this); 2. Client 영역 구하기 GetClientRect(&rect); WM_SIZE 메시지발생후 cx,cy 사용 3. 문자열 사각형안에 그리기 pDC->DrawText(문자열,사각형,Style); Style: DT_BOTTOM - 문자열을 사각형 맨아래줄에배열 반드시 DT_SINGLELINE과 함께사용 DT_CENTER - 문자열을 가로중앙에 배치 DT_VCENTER - 문자열을 세로중앙에 배치 DT_LEFT,RIGHT - 문자열을 좌,우로 배치 DT..
일반적으로 MFC등과 같은 프로그램을 개발할 때, "C:\Program Files\..."와 같은 파일 위치를 참조하거나 레지스트리의 HKLM/softwoare/... 등의 키를 참조하는 등의 일을 진행한다. 더 나아가서는 C:\Windows\System32\drivers\etc\hosts 와 같은 파일을 읽거나 쓰는 등의 일을 담당할 수도 있다. XP 이하, 9x, NT, 200x 등에서 어드민 계정으로 로그인 하여 아무 이상없이 작동하던 코드가 있다면, 이를 비스타 하에서 재 컴파일하서 돌려보면 제대로 되기는 커녕, 시스템 call에서 계속 에러가 발생하기 쉽다. 가장 큰 이유는, 기존과 같이 로그인 한 계정이 admin계정이면 거기에서 실행되는 모든 프로그램은 모두 admin 계정을 갖는 기존 경우..
MFC에서 다이얼로그 내에 컨트롤의 위치 좌표를 구하려는데.. 왠지 GetClientRect일것 같은데 이건 위치는 안구하고 크기만 구한다. GetWindowRect를 하면 바탕화면 전체 대비 컨트롤 위치가 나온다. 그렇다면 .. 쉽게 this->GetWindowRect로 구한 좌표해서 컨트롤.GetWindowRect 로 구한 좌표를 빼주면 땡 아닌가? 근데 이러면 간지가 안난다.. Static Control을 m_static으로 변수 추가 한 후 CRect rect; m_static.GetWindowRect(&rect); ScreenToClient(&rect); 해주면 위치 딱 나온다~ 근데 문제는 제목 표시줄 크기는 제외하고 구하기 때문에 결국에 보정은 해줘야 한다는거;;;
잘은 모르겠지만 이것저것 뒤져보니 꽤 나왔다. 일단 응용프로그램을 여러개로 쪼개서 만든 후 ShellExecute에서 lpOperation값을 runas로 하여 실행하는게 가장 간단한 것 같다. 이 경우 관리자 권한으로 상승 시킬지 요구하는 창이 하나 뜬다고 한다. 그리고 COM ATL을 써서 하는 The COM Elevation Moniker 라는게 있는 것 같다. 링크는 http://msdn.microsoft.com/ko-kr/library/ms679687.aspx http://blogs.msdn.com/b/vistacompatteam/archive/2006/09/28/cocreateinstanceasadmin-or-createelevatedcomobject-sample.aspx 이거고 예제 소스는 ..
DLL이나 LIB 파일 추가 하는 방법! Visual Studio에서는 프로젝트 속성 들어가서 해야되는지 알았는데.. 알고보니 간단한게 있었다.. 헤더는 그냥 추가하면 되고 #pragma comment(lib, "라이브러리이름") 써주면 되더라.. 예를 들어 NetApi32.lib 파일을 라이브러리로 추가할려면 #include //NetApi32의 헤더 #pragma comment(lib, "NetApi32") //또는 #pragma comment(lib, "NetApi32.lib") 해주면 된다!!
- Total
- Today
- Yesterday
- linux
- Cloud
- Quiz
- Troubleshooting
- 드라이버
- AWS
- driver
- 음악
- C
- kering
- jni강좌
- database
- jni
- MFC
- Python
- NDK
- java
- 리눅스
- API
- it
- source
- C++
- gcc
- winapi
- db
- algorithm
- android
- 안드로이드
- Visual C++
- 프로그래밍
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |