Programming/C Win32 MFC2017. 11. 24. 17:56

vs2010에서는 기본은 아니고 변경해줘야 하고..

vs2015정도 부터는 기본으로 되는거 같네?


[링크 : http://egloos.zum.com/mindol/v/209099]

[링크 : https://msdn.microsoft.com/en-us/library/d58s8sak.aspx]

Posted by 구차니
Programming/C Win32 MFC2017. 11. 24. 16:51

COMMAND는 클릭시 발생하고

프로토타입은 아무런 인자를 받지 않는다.

void CtestDlg::On___()

{

// TODO: 여기에 명령 업데이트 UI 처리기 코드를 추가합니다.

}


UPDATE_COMMAND_UI는 체크박스 등에 대한 처리라고 하는데

프로토타입은 CCmdUI를 받는다.

void CtestDlg::OnUpdate___(CCmdUI *pCmdUI)

{

// TODO: 여기에 명령 업데이트 UI 처리기 코드를 추가합니다.



[링크 : http://kjhworld.tistory.com/entry/메뉴-항목의-활성화비활성화]

[링크 : http://blog.naver.com/hji0223/220663170726]

Posted by 구차니
Programming/C Win32 MFC2017. 11. 13. 17:18

WM_DEVICECHANGE를 보다가 나온 녀석..

도대체 정체가 멀까?


001b 27 WM_DEVMODECHANGE

0219 537 WM_DEVICECHANGE

[링크 : https://wiki.winehq.org/List_Of_Windows_Messages]


읽어 보면.. 사용자가 장치 모드를 바꾸는 거랑(즉, 사용자가 트리거.. 해상도 변경 등... 일려나?)

The WM_DEVMODECHANGE message is sent to all top-level windows whenever the user changes device-mode settings.

A window receives this message through its WindowProc function. 

[링크 : https://msdn.microsoft.com/.../dd145209(v=vs.85).aspx] WM_DEVMODECHANGE


장치 설정이 바뀌거나(뽑는건 사용자의 행위지만, 뽑음으로 장치 설정이 바뀌는건 OS의 책임이니?)

의 차이인거 같은데 누가 행위의 주체이냐? 라는 미묘한 차이가 관건으로 보인다.

Notifies an application of a change to the hardware configuration of a device or the computer.

A window receives this message through its WindowProc function. 

[링크 : https://msdn.microsoft.com/.../aa363480(v=vs.85).aspx] WM_DEVICECHANGE


ResetDC()는 WM_DEVMODECHANGE가 처리 할때 불리는데..

용지 방향을 바꿀때 쓸수도 있다. 근데 장치명 변경이나 이런데는 쓰지 말라 라는데 용도가 머냐..

The device context is updated from the information specified in the Windows DEVMODE structure. This member function only resets the attribute device context.

An application will typically use the ResetDC member function when a window processes a WM_DEVMODECHANGE message. You can also use this member function to change the paper orientation or paper bins while printing a document.

You cannot use this member function to change the driver name, device name, or output port. When the user changes the port connection or device name, you must delete the original device context and create a new device context with the new information.

Before you call this member function, you must ensure that all objects (other than stock objects) that had been selected into the device context have been selected out.

[링크 : https://msdn.microsoft.com/ko-kr/library/etschh40.aspx]

'Programming > C Win32 MFC' 카테고리의 다른 글

CCheckListBox  (0) 2017.11.24
MFC CMenu 이벤트 핸들러 관련  (0) 2017.11.24
윈도우 ini 파일 사용하기  (0) 2017.11.13
hidpi 지원 - winform wpf mfc  (2) 2017.11.10
cedit ctrl-a 단축키 사용하기  (0) 2017.11.08
Posted by 구차니
Programming/C Win32 MFC2017. 11. 13. 16:14

한번 써봐야지..


msdn 문서를 보니 16비트 OS와의 호환성으로 놔둔거고

레지스트리 쓰세요~ 라고 되어있네?


[링크 : http://myblue0324.tistory.com/93]

[링크 : http://terrorjang.tistory.com/18]

[링크 : https://ko.wikipedia.org/wiki/INI_파일]


BOOL WINAPI WritePrivateProfileString(

  _In_ LPCTSTR lpAppName,

  _In_ LPCTSTR lpKeyName,

  _In_ LPCTSTR lpString,

  _In_ LPCTSTR lpFileName

); 

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms725501(v=vs.85).aspx]


DWORD WINAPI GetPrivateProfileString(

  _In_  LPCTSTR lpAppName,

  _In_  LPCTSTR lpKeyName,

  _In_  LPCTSTR lpDefault,

  _Out_ LPTSTR  lpReturnedString,

  _In_  DWORD   nSize,

  _In_  LPCTSTR lpFileName

); 

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms724353(v=vs.85).aspx]


+

ini 파일 존재 여부는 이걸로 하면 편할거 같고..

BOOL PathFileExists(

  _In_ LPCTSTR pszPath

); 

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/bb773584(v=vs.85).aspx]


음.. Private 붙은거랑은 무슨 차이일려나?

읽어 보다 보니.. lpFileName이 없는게 차이고.. win.ini에 섹션을 만들어서 관리 하는 것으로 보이네..

일단 내 목적에는 Private..가 맞는 듯 하다.

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/ms724366(v=vs.85).aspx] GetProfileString

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/ms725504(v=vs.85).aspx] WriteProfileString

'Programming > C Win32 MFC' 카테고리의 다른 글

MFC CMenu 이벤트 핸들러 관련  (0) 2017.11.24
정체 불명의.. 메시지 WM_DEVMODECHANGE  (0) 2017.11.13
hidpi 지원 - winform wpf mfc  (2) 2017.11.10
cedit ctrl-a 단축키 사용하기  (0) 2017.11.08
mfc sleep 주의  (0) 2017.11.08
Posted by 구차니
Programming/C Win32 MFC2017. 11. 10. 18:27

win10 에서는 바로 적용되는 hidpi의 적용과

win7에서는 최소한 로그아웃해야 하는 녀석이긴 하지만


아무튼 win32 에서도 dpi 변경시에 이벤트가 날아 온다는 거군..

다만 win32는 vs2012 이후에 적용이 되는 것 같은데


찾다보니 win7 대응으로 vs2010 이고

win8  이후에 대응을 위해 vs2012 출시 된 거 같으니

그런 지원 기능 차이가 생기는 걸려나?


그래서 vs2008이 vista 대응이라 개판인건가!?

(찾아보니. 비스타 지원용.. 그래서 그렇게 vs2008도 망작이었던 게냐...)

[링크 : https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#2008]


case WM_DPICHANGED

    // Find the button and resize it 

    HWND hWndButton = FindWindowEx(hWnd, NULL, NULL, NULL); 

    if (hWndButton != NULL) 

    { 

        UpdateButtonLayoutForDpi(hWndButton); 

    } 

}  

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/dn312083(v=vs.85).aspx]


어? 지원범위로는 win7 에서는 해당 이벤트가 발생하지 않을테니..

초기 실행시 CreateWindow에서 

Minimum supported client Windows 8.1 [desktop apps only]


이 놈도.. win8 이상..

GetDpiForMonitor()

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/dn280510(v=vs.85).aspx]


이 놈은 win10 이상.. -_-

GetDpiForWindow()

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/mt748624(v=vs.85).aspx]


[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/mt843498(v=vs.85).aspx] win32

   [링크 : https://blogs.msdn.microsoft.com/vcblog/2010/03/11/mfc-applications-now-default-to-being-dpi-aware/]

[링크 : https://docs.microsoft.com/en-us/dotnet/framework/winforms/high-dpi-support-in-windows-forms] winform

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ee308410(v=vs.85).aspx] wpf


+

2017.11.13

GetDeviceCaps(hdcScreen, LOGPIXELSX);

GetDeviceCaps(hdcScreen, LOGPIXELSY); 

[링크 : https://stackoverflow.com/questions/12652835/getting-actual-screen-dpi-ppi-under-windows]


int GetDeviceCaps(

  _In_ HDC hdc,

  _In_ int nIndex

);


LOGPIXELSX

Number of pixels per logical inch along the screen width. In a system with multiple display monitors, this value is the same for all monitors.

LOGPIXELSY

Number of pixels per logical inch along the screen height. In a system with multiple display monitors, this value is the same for all monitors.


Minimum supported client

Windows 2000 Professional [desktop apps only] 

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/dd144877(v=vs.85).aspx]


음.. win7 에서는 96dpi로 기본 설정된다고 하는데

변경하면 저게 다르게 나오려나?

[링크 : https://www.techrepublic.com/.../get-a-better-view-in-windows-7-by-adjusting-dpi-scaling/]

'Programming > C Win32 MFC' 카테고리의 다른 글

정체 불명의.. 메시지 WM_DEVMODECHANGE  (0) 2017.11.13
윈도우 ini 파일 사용하기  (0) 2017.11.13
cedit ctrl-a 단축키 사용하기  (0) 2017.11.08
mfc sleep 주의  (0) 2017.11.08
win32 usb class  (0) 2017.11.03
Posted by 구차니
Programming/C Win32 MFC2017. 11. 8. 17:34

음.. 그냥.. 기본 단축키가 아니었던건가 -ㅁ-?


[링크 : http://blog.naver.com/sjplus/220436689165]

'Programming > C Win32 MFC' 카테고리의 다른 글

윈도우 ini 파일 사용하기  (0) 2017.11.13
hidpi 지원 - winform wpf mfc  (2) 2017.11.10
mfc sleep 주의  (0) 2017.11.08
win32 usb class  (0) 2017.11.03
CEdit 내용 지우기와 메모리 사용량  (0) 2017.10.26
Posted by 구차니
Programming/C Win32 MFC2017. 11. 8. 15:57

Sleep() 함수는 그 함수에서 멈춰버리지

메인 쓰레드 메시지를 처리하지 못하니까

시리얼 같은거 보내면서 Sleep() 하고 또 보내면

받는 쪽에서 처리를 못한채 이벤트가 쌓여서 죽어 버린다.


[링크 : http://lafirr.tistory.com/56]

[링크 : http://egloos.zum.com/sweeper/v/2942286]

'Programming > C Win32 MFC' 카테고리의 다른 글

hidpi 지원 - winform wpf mfc  (2) 2017.11.10
cedit ctrl-a 단축키 사용하기  (0) 2017.11.08
win32 usb class  (0) 2017.11.03
CEdit 내용 지우기와 메모리 사용량  (0) 2017.10.26
CEdit 길이 제한  (0) 2017.10.26
Posted by 구차니
Programming/C Win32 MFC2017. 11. 3. 16:25

GetRawInputDeviceInfo()를 통해서 받아오니..

이름이 내가 기대했던 device description이 아니라.. 식별자에 가까운 녀석이 나온다 -_-a

nResult = GetRawInputDeviceInfo(pRawInputDeviceList[i].hDevice, // Device

RIDI_DEVICENAME,                // Get Device Name

wcDeviceName,                   // Get Name!

&nBufferSize);


str.Format(_T("%s"),wcDeviceName);

\\?\HID#VID_060B&PID_6220&MI_00#7&3275dfb8&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}



[링크 : https://stackoverflow.com/questions/36453082/c-winapi-get-list-of-all-connected-usb-devices]

[링크 : https://oroboro.com/usb-serial-number/]

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms645597(v=vs.85).aspx]

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms645598(v=vs.85).aspx]



+

2017.11.05

내가 원하는 항목이 bus reported device description 인 듯?

[링크 : http://searchingforbit.blogspot.com/2014/05/winusb-communication-with-stm32-round-2.html]


        if (SetupDiGetDeviceRegistryProperty (hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC,

                                              &dwPropertyRegDataType, (BYTE*)szDesc,

                                              sizeof(szDesc),   // The size, in bytes

                                              &dwSize))

            _tprintf (TEXT("    Device Description: \"%s\"\n"), szDesc);


            if (fn_SetupDiGetDevicePropertyW (hDevInfo, &DeviceInfoData, &DEVPKEY_Device_BusReportedDeviceDesc,

                                              &ulPropertyType, (BYTE*)szBuffer, sizeof(szBuffer), &dwSize, 0))

                _tprintf (TEXT("    Bus Reported Device Description: \"%ls\"\n"), szBuffer); 


[링크 : https://stackoverflow.com/questions/3438366/setupdigetdeviceproperty-usage-example]

   [링크 : https://stackoverflow.com/.../how-to-retrieve-bus-reported-device-description-from-arriving-usb-device]


SetupDiGetDeviceProperty function

[링크 : https://msdn.microsoft.com/en-us/library/windows/hardware/ff551963(v=vs.85).aspx]

SetupDiGetDeviceRegistryProperty function

[링크 : https://msdn.microsoft.com/en-us/library/windows/hardware/ff551967(v=vs.85).aspx]

'Programming > C Win32 MFC' 카테고리의 다른 글

cedit ctrl-a 단축키 사용하기  (0) 2017.11.08
mfc sleep 주의  (0) 2017.11.08
CEdit 내용 지우기와 메모리 사용량  (0) 2017.10.26
CEdit 길이 제한  (0) 2017.10.26
MFC USB 시리얼 제거 탐지하기 OnDeviceChange()  (0) 2017.10.25
Posted by 구차니
Programming/C Win32 MFC2017. 10. 26. 15:06

시리얼 모니터 만들었는데.. 입력 받을때 마다 메모리가 쭉쭉 늘어난다 ㅠㅠ

내용을 empty string으로 해도.. 삭제하고 undo 버퍼를 비워도 안되는데

멀 해야지.. 할당했던 메모리를 다시 뱉을까?


메모리 사용량 늘어남 -_-

m_eterm0.SetSel(0, -1);

m_eterm0.Clear();

m_eterm0.EmptyUndoBuffer();


메모리 사용량 변함없음(줄지 않음)


m_eterm0.SetWindowTextW(_T("")); 



[링크 : https://msdn.microsoft.com/ko-kr/library/f7yhsd2b.aspx]

'Programming > C Win32 MFC' 카테고리의 다른 글

mfc sleep 주의  (0) 2017.11.08
win32 usb class  (0) 2017.11.03
CEdit 길이 제한  (0) 2017.10.26
MFC USB 시리얼 제거 탐지하기 OnDeviceChange()  (0) 2017.10.25
MFC 다이얼로그에 웹브라우저 넣기  (0) 2017.10.24
Posted by 구차니
Programming/C Win32 MFC2017. 10. 26. 14:44

당연(?) 하겠지만 CEdit에 넣을수 있는 글씨는 제한이 있다.

풀어는 줄 수 있는데.. 적당히 풀어야 메모리 적당히 먹겠...지?


[링크 : http://blog.naver.com/joon2457/220628611105]


CEdit::SetLimitText

void SetLimitText( UINT nMax );

Parameters

nMax

The new text limit, in bytes. 

[링크 : https://msdn.microsoft.com/en-us/library/aa279321(v=vs.60).aspx]


CEdit::LimitText

void LimitText( int nChars = 0 );

Parameters

nChars

Specifies the length (in bytes) of the text that the user can enter. If this parameter is 0, the text length is set to UINT_MAX bytes. This is the default behavior. 

[링크 : https://msdn.microsoft.com/en-us/library/aa279307(v=vs.60).aspx]

Posted by 구차니