본문 바로가기

전체 글300

WPF 체크박스 글자 색 변경 체크박스의 글자는 아래와 같이 내용과 같은 방식으로 추가를 한다. 색상은 Attribute 중의 Foreground를 이용한다. 내용 선택 글자색은 흰색으로 되고 글자 내용은 '내용 선택'으로 처리가 된다. 2021. 6. 7.
WPF 동적으로 Margin 변경 버튼이나 Grid 등의 Margin을 동적으로 변경하는 방법 btn.Margin = new System.Windows.Thickness{ Left = 10 }; 또는 아래와 같이 btn.Margin = new System.Windows.Thickness{ Left = 10, Top = 0, Right = 10, Bottom = 0 }; https://docs.microsoft.com/ko-kr/dotnet/desktop/wpf/advanced/how-to-set-margins-of-elements-and-controls?view=netframeworkdesktop-4.8 2021. 6. 7.
Combobox SelectionChanged 호출시 SelectedItem 확인 방법 private void cb_SelectionChanged(object sender, SelectionChangedEventArgs e) { string name = (sender as ComboBox).SelectedItem.ToString(); 2021. 5. 10.
ProcessID로 Handle 찾기 및 WM_COPYDATA 처리 문제 IPC를 할 때 다양한 방법이 있지만 WM_COPYDATA를 사용한 윈도우Q에 SendMessage를 보내는 방식이 있다. 간단하고 쉬워서 많이 사용을 한다. WM_COPYDATA를 이용해서 C#, MFC 등 다른 개발 언어로 통신을 하는 경우도 많다. 이번에 C# MFC 프로그램간에 SendMessage를 보내는데 잘 안되는 문제가 발생했다. C#에서 RunExecute로 MFC 프로그램을 실행하고 C# 앱의 ProcessID를 전달받아 MFC에서는 ProcessID로 핸들을 찾고 다시 SendMessage를 보내는 방식이다. MFC에서 아래와 같은 방식으로 핸들을 구했다. //Get Device Manage HWND HWND m_hwndDeviceMan = NULL; HWND m_tHwnd = NUL.. 2021. 4. 12.
std::map에서 char array를 key로 사용하기 아래와 같이 char array를 map의 키로 사용을 해보려고 테스트를 해봤다. std::map 2021. 4. 8.
memcmp 바이트 Array 비교를 할 때 사용 C, C++ 표준 함수 중에 memcmp 함수가 존재하다. #include // C++ 에서는 int memcmp(const void* ptr1, const void* ptr2, size_t num); ptr1 이 가리키는 처음 num 바이트의 데이터와 ptr2 가 가리키는 처음 num 바이트의 데이터를 비교하여 이들이 같다면 0 을 리턴하고 다르다면 0 이 아닌 값을 리턴. 이 함수를 사용하는 바이트 Array가 같은지 확인을 할 수 있다. for 문을 돌면서 바이트 하나씩 비교하는 함수를 만들 필요가 없다. 2021. 3. 31.
DNPTIME Convert unsigned int ComputeDayOfYear(unsigned short year, unsigned short mon, unsigned short day ) { return ((mon * 275 / 9) - (((mon + 9) / 12) * (1 + (((year % 4) + 2) / 3))) + day - 30); } void conv_dnp_to_gmt(unsigned char *buf, unsigned short *pSysTime) { unsigned int lsg, msg, lval; unsigned short year=0,mon=0,day=0,hour=0,min=0,sec=0,msec=0; lsg = buf[0] | (buf[1] >24) & 0xff; memcpy(&buf[2], &w.. 2020. 11. 3.
convert time_t to System.Datetime and TimeZoneInfo C#에서 time_t 값을 System.Datetime으로 변경하는 방법과 UTC --> Local Time 변경 방법 time_t ttime; System.DateTime timeUtc = new System.DateTime(1970, 1, 1).AddSeconds(ttime); TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Korea Standard Time"); DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone); time_t는 1970년 1월 1일 기준으로 지난 초를 표시한다. 따라서 System.DateTime의 AddSeconds 함수를 이용해서 컨버를 한다. U.. 2020. 10. 14.
QT Plugins 폴더 Windows 배포 문제 이번에 작업을 하면서 QT가 설치 되지 않는 컴퓨터에서는 DLL을 모두 포함해서 배포를 해서 실행 해도 프로그램이 강제 종료되는 문제가 발생했다. 원인을 파악한 결과 Plugins 폴더를 함께 배포하지 않아서 발생한 것으로 확인 되었다. 그러나 문제는 Plugins 폴더를 실행 파일과 같은 경로에 추가해도 정상 작동을 하지 않는 것이다. 빌드를 할 때 Plugins 폴더 위치가 배포되는 컴퓨터에도 같은 위치에 존재해야만 정상 작동하는 것을 확인 했다. 빌드 할 때 관련 내용이 실행 파일에 포함되기 때문에 문제를 수정하기 위해서는 아래와 같이 소스에 추가를 해야 한다. QApplication a(argc, argv); #if defined(Q_OS_WIN32) //Windows 배포할 때 필요하다. a.a.. 2020. 7. 24.