c#

  • c# 윈도우즈 폼즈 per monitor v2로 dpi 설정하기

    큰 모니터에 높은 해상도로 설정을 하면 아이콘 같은 인터패이스 엘리먼트들이 작아서 보기 힘들다. 윈도우즈의 디스플래이 배율을 150% 200% 등으로 높이면 이들을 크게 출력한다. 디스플래이 배율 설정은 애플리캐이션 개발을 까다롭게 한다. 하나의 애플리캐이션이 서로 다른 배율의 모니터에서 하나는 뚜렷하게 다른 하나는 뚜렷하지 않게 보이는 경우가 흔하기 때문이다. 증권 회사들의 트래이딩 애플리캐이션이 대표적인 예다. 큰 모니터에서는 뚜렷하지…

  • ApplicationDataContainer로 unpackaged WinUi 앱 설정 저장하기

    윈도우즈 폼즈에서 이용하던 properties.settings는 winui로 이용할 수 없다. .settings 파일을 추가할 수는 있는데 작동은 하지 않는다. 패키지는 아래의 코드로 간단하게 이용할 수 있다. Windows.Storage 내임스패이스를 쓰지 않는 거에 유의한다. 이건 윈도우즈 폼즈 등을 위한 거다. 언패키지드는 한 줄이 더 필요하다. 우선 프로젝트 설정을 확인한다. properties.settings보다 더 편하다. 왠만하면 패키지로 쓰는 게 좋은데 ls증권 api에 포함된…

  • WinUi 아이콘 설정

    winui 앱에는 두 종류의 아이콘을 설정한다. png와 ico 파일이 필요하다. png는 256 이상 ico는 256, 48, 32, 16이어야 흐릿하게 나오지 않는다. 파일 가져오기 ico는 가져와야 하고 png는 한 번 읽기만 하면 된다. ico를 가져오는 데에는 두 개의 방법이 있다. 후자의 방법으로 가져오면 자동으로 content 설정을 한다. 더 간단하여 이 방법이 좋다. 타이틀바와 태스크바 아이콘 설정…

  • ls증권 dll api WinUi SetWindowLong SetWindowSubclass 성능 비교

    winui로 윈도우 메시지를 처리하는 데에는 크게 네 가지 방법이 있다. 이들 가운데 누게트 설치를 하지 않는 게 둘이다. 일반적으로 누게트 패키지를 이용하면 더 편하지만 느리다. 바로 win32 api를 이용하는 게 더 원초적이고 더 빠르다. 대신 코드가 더 난잡해질 수 있지만 아래의 경우에는 그렇지도 않다. 간단하다. 테스트할 두 메떠드는 SetWindowLong과 SetWindowSubclass이다. 전자는 윈도우즈 폼즈와 비교할 때…

  • ls증권 dll api 윈도우즈 폼과 WinUi 성능 비교

    ls증권의 dll api는 실시간 대이터를 SendMessage로 처리한다. 윈도우즈는 이걸 윈도우 메시지로 처리한다. 윈도우 메시지는 윈도우즈 폼의 경우 WndProc으로 처리하고 WinUi는 win32 api인 SetWindowLong이나 SetWindowSubclass를 이용한다. WinUi의 윈도우 메시지 처리가 더 복잡하다. 성능 차이를 비교해 봤다. WinUi가 더 느릴 거라 예상했다. 코스피와 코스닥 4,700개 정도 되는 종목들 모두에 체결, 호가, 프로그램 매매, 거래원 실시간 이벤트를 작동시켰다….

  • WinUi로 WndProc이용하여 윈도우 메시지 처리하기

    WinUi로는 WndProc을 쓸 수 없다. 윈도우 메시지를 처리하려면 SetWindowLong을 이용해 메시지를 가로채 처리해야 한다. Changes an attribute of the specified window.SetWindowLongA function (winuser.h) SetWindowLongA는 앤시 버전이고 SetWindowLongW는 유니코드 버전이다. SetWindowLong은 두 버전 가운데 하나를 자동으로 선택하는 alias다. 따라서 SetWindowLong는 검색해 봐야 나오지 않는다. DllImport의 EntryPoint에는 SetWindowLong를 설정해도 작동하지만 LoadLibrary는 그렇지 않다. A/W를 특정해야 한다. The…

  • [프로그래밍] 완전하게 다른 뜻으로 쓰이는 subclass

    컴퓨터 프로그래밍에서 subclass는 명사와 동사 모두로 쓰인다. 말 그대로 상속 클래스를 뜻한다. derived class와 같은 용어다. base class를 상속하여 생긴 클래스다. 대표적인 예가 아래 코드에서 Form1이다. Instead of creating a partial class that is based on x:Class, the provided x:Class is created as an intermediate class, and then your provided derived class is expected to…