매우 오랜 시간 MS의 Visual Studio Code를 이용해서 Go언어 개발을 해 왔습니다만.. Vscode 에서 go언어를 지원하기 이전에는 서브라임텍스트 라던가 gVim등 정말 많은 편집기들을 전전 긍긍 했고 한때는 Notepad++ 로 Go언어 개발을 하던 시절도 있었습니다. Vscode 에서 go언어를 지원하기 시작하고 디버깅도 가능해지고 각종 go 언어 관련 부가적인 기능들을 지원하기 시작하면서 부터는 주로 Vscode 로 개발을 해 왔습니다. 우선 무료라는 점이 가장 큰 이유였고, 별다른 플러그인들 없이 git 자체도 IDE외부에서 관리하는 편이고 대부분은 콘솔에서 명령어를 쳐서 무언가를 하거나 자동화를 시켜 버리는 편이어서 .. 크게 불편함 없이 사용해 왔습니다. JetBrains에서 Goland 라는 IDE가 나온 시점에서도 이런저런 사람들의 극찬에도 불구하고 … 더 보기…
오랜만에 walkmgr 에 새로운 기능을 추가하였습니다. 기존에 WebView 가 walkmgr 에 존재하였습니다. 이건 walk 에서 구성되어 있는 것이고 윈도의 OCX기반 WebView를 사용해 보신 분들은 잘 아시겠지만 .. 레거시 중에 레거시죠 .. 마지막 IE에 비해서도 기능이 허접하며 표준따윈 개나 줘버린 과거의 유산입니다. 최신 HTML, CSS, JS등을 이용 못하는건 둘째 치더라도 오만가지 JS관련 오류들을 비롯해서 많은 불편함을 감수해야지만 사용 가능한 놈이긴 한데요 .. MS에서는 기존의 엣지 브라우져를 크로미움 기반으로 바꾸고 현재 업데이트를 제때 받은 윈도10이나 윈도11의 경우 기본적으로 크로미움 기반의 엣지를 탑재하고 있습니다. 이 크로미움 엣지를 출시하면서 MS에서는 오랜 숙원인 윈도의 내장 웹뷰를 크로미움 기반의 콤포넌트로 교체하는 작업을 … 더 보기…
지금까지 walkmgr 에 추가된 기능들로도 어지간한 윈도 네이티브 GUI 프로그래밍은 가능 했습니다만. 보편적인 GUI 프로그래밍에서 가장 크게 부족한 기능중 하나가 모달 다이얼로그(Modal Dialog) 기능이었습니다. 흔히 다이얼로그(Dialog)라고 하자면 대화창 또는 대화상자라고 칭하곤 하지요.. 일반적으로는 사용자의 의사를 묻거나 사용자의 어떤 선택이 필요한 경우 사용자 선택에 따른 로직의 분기가 필요하다던가 하는 경우에 사용됩니다. 가장 쉽게 접하는것은 MessageBox 같은 함수겠지요. 자바스크립트를 기준하자면 alert 이나 confirm 같은 함수로 생성되는 대화창을 들 수 있겠습니다. 기존에 제공되던 walkmgr.NewWin 같은 메소드를 통해 생성하는 일반적인 윈도와 모달 다이얼로그가 가지는 가장큰 차이점은 해당 창을 생성한 부모창과 별개로 동작하느냐 아니냐의 차이를 들 수 있습니다. 사실 win32 API나 … 더 보기…
웹 관련 개발을 하게되면 HTTP GET 방식으로 단순 데이터를 수신해야 하는 경우가 있습니다. 이런 경우 Response 데이터의 크기가 큰 경우에 서버측에서 데이터를 gzip 으로 압축해서 전송하는 경우도 종종 있습니다. 트래픽 비용을 cpu 연산으로 커버 치는 샘이겠지요.. 이런식의 처리가 가능하려면 Reqeust Header 상에도 accept-encoding 같은 정보에 gzip 을 지원 한다는 명시를 해주지 않을 경우 서버측에선 에러를 리턴하게 됩니다. 상대가 gzip 압축을 처리하지 못한다는데 굳이 gzip 으로 압축된 응답을 할 이유 자체가 없기 때문이겠지요 .. 여튼 그런 상황에서 사용 가능한 간단한 함수하나 던져봅니다.
앞서 기본적인 트리뷰 생성법에 대해서는 아래 링크를 참고하시구요. 몇가지 예제를 가지고 추가 사용법을 알려드리도록 하겠습니다. 트리뷰에서 선택된 아이템의 이름을 변경하는 예제입니다. 현재 선택된 아이템의 객체를 얻는 방법과 명칭을 변경하는 방법입니다. 1,2,3 이라는 이름을 가진 3개의 아이템을 트리뷰의 루트에 추가하였습니다. 여기까진 앞서 알려드린 예제들과 같이 AddItem 메소드의 사용법만 알고 계시다면 큰 차이는 없습니다. “선택 아이템 이름 변경” 이라는 버튼을 하나 만들고 이 버튼이 클릭되면 동작할 함수를 작성합니다. 현재 트리뷰에 선택된 아이템은 CurrentItem() 메소드로 얻을 수 있습니다. 전달되는 파라미터는 없고 그냥 호출만 하시면 됩니다. 만약 현재 선택된 아이템이 없으면 이 메소드의 리턴값은 nil입니다. CurrentItem 메소드의 리턴값은 항상 체크하셔야 … 더 보기…
이번에 모두의 PDF에 책갈피 기능을 추가하면서 PDF의 책갈피 기능이 Parent, Children 을 이용한 무한 계층구조 인지라 이런 형태를 다루는데 가장 적합한 UI요소는 아무래도 트리뷰(TreeView)라서 관련 기능을 walkmgr 에 추가해 봅니다. MFC나 윈도 API를 다루던 시절에도 사실 트리뷰는 진짜 쓰기 싫어라 하던 놈중 하나인데요 가능하면 리스트컨트롤로 대충 땜빵해서 쓰곤 했는데 .. 계층구조를 리스트 컨트롤로 다루는건 매우 비효율적인지라 미루고 미루다 추가해 봅니다. 이런놈을 보통 트리뷰라고 하지요.. 우리가 가장 흔히 접하는 경우를 보자면 윈도 탐색기의 폴더구조를 들 수 있겠습니다. 대표적인 계층구조의 트리뷰를 사용하고 있는 놈입니다. 기존에 pirogom/walk 나 pirogom/walkmgr 을 쓰시던 분들은 go get -u 명령으로 업데이트 하시면 업데이트된 … 더 보기…
walkmgr 에 메뉴관련 기능과 예제는 한참 전에 추가를 해두긴 했습니다만.. 메뉴와 관련된 글은 작성을 제대로 안한것 같아서 예제도 조금더 보강을 하고 관련 글을 작성해봅니다. 관련 예제는 위의 링크 참고 하시면 됩니다. 윈도 프로그래밍을 하다보면 진짜 유용하고 친숙하게 사용하는게 메뉴입니다. UI나 그런거 귀찮으면 ㅎㅎ 그냥 메뉴에 다 때려넣어도 ;;; 첫번째 예제 부터 가봅시다.. walkmgr 을 이용해서 생성된 윈도에 메뉴기능을 사용하는 방법은 단순합니다. 우선 메뉴 객체를 구성한 뒤에 해당 객체를 추가하고자 하는 대상에 AddMenu 로 추가해서 넣으면 되겠습니다. 왜 윈도가 아닌 추가하고자 하는 대상에 AddMenu 를 하냐 표현 하냐면 .. 메뉴라는 것은 메뉴 안에 메뉴가 또 들어가는 서브메뉴 … 더 보기…
윈도 GUI 프로그래밍시 메뉴와 함께 있으면 유용한 기능중 하나가 툴바(ToolBar)입니다. 흔히 이런 것들로 보통 타이틀바나 메뉴 바로 아래즈음에 아이콘들로 주르륵~ 하니 놓여지는 .. 열기, 자르기, 저장 같은 기능들을 모아두는 것들을 툴바라고들 하지요.. 제가 클론해서 수정중인 lxn/walk 에도 기본적으로 제공을 하고 있는 기능입니다만.. walkmgr 구조에 포함시켜 보았습니다. 원래 윈도의 툴바는 수직 방향으로도 구성이 가능하고 lxn/walk 에서도 파라메터 상으로는 수직을 지정가능하게 되어 있긴 한데 제대로 동작하진 못하는것 같아서 우선 전통적인 툴바에 대해서만 다뤄 보도록 하겠습니다. pirogom/walkmgr 에 추가된 코드는 아래 링크를 참고하시구요 walkmgr_example 에 추가된 예제 코드는 아래 링크를 참고하십시요. 간단한 설명을 붙여봅니다. 툴바는 기본적으로 윈도 객체에 붙는 … 더 보기…
walkmgr 에 Link Label 을 추가 하였습니다. 쉽게 말해서 URL 링크를 포함하는 텍스트 라벨을 사용할 수 있도록 추가 하였습니다. walkmgr 에 link_label.go 파일이 추가 되었구요. 링크 라벨은 기본적으로 lxn/walk 에서 제공하던 기능을 walkmgr 체계에 낑가 넣고 텍스트 정렬과 관련된 부분만 기존의 다른 walkmgr 메소드들과 통일해두고 링크 클릭시에 웹 브라우져를 호출해주는 이벤트 핸들링 코드를 추가한 정도 입니다. walkmgr_example 패키지에 linklabel_test.go 파일을 참고하시면 되겠구요.. 간단한 설명을 시작해 봅니다. GUI 프로그래밍을 하다보면 URL 링크를 걸고 싶을때가 있습니다. 물론 버튼을 추가해놓고 클릭하면 홈페이지를 호출하는 등의 형태로 사용해도 되겠습니다만. 때론 텍스트 내용중 특정 문자에 URL 링크를 걸고 싶을때도 있는 법이지요..그런때 사용하시면 … 더 보기…
업데이트된 패키지는 walkmgr, walkmgr_example 2개 입니다. 네이티브 GUI 프로그래밍을 하다 보면 .. 한 화면에 매우 많은 UI요소를 배치해야 하는 경우가 있습니다. 보통 일반 사용자용 프로그램을 만들때 보다는 내부에서 사용할 각종 툴(Tool)같은 것들을 만들때에는 사용성 보다는 기능에 집중하는 경우 같은.. 내가 만들어서 나 혼자 쓰는 프로그램이 아니라면 사용자 컴퓨터의 해상도나 모니터 크기 등을 특정할 순 없다보니 일반적으로 최근에 FHD 모니터는 사용하는 편이라 생각 하고 최대 1920*1080 해상도에 맞춰 개발을 했더니 뜬금없이 HD 해상도의 사용자가 화면이 잘린다는 등의 ㅎㅎ 여튼! 그리하야 lxn/walk 에 존재하던 ScrollView를 walkmgr 체계(?)에 끌어다 넣고 관련 예제도 추가해서 Git에 Push 해 두었습니다. 간단한 설명도 … 더 보기…
댓글을 달려면 로그인해야 합니다.