4.1 スクロールバー (1) CreateWindowでの指定 HWND initInst(HINSTANCE hCurI){ HWND hw; hw=CreateWindow(TEXT("クラス名"),TEXT("こんばんは"), WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_VSCROLL, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hCurI,NULL); return hw; } (3) プログラム例 #include "myWin.h" static SCROLLINFO scr; static TCHAR str[128]; void procCreate(HWND hw, WPARAM wp,LPARAM lp){ scr.cbSize = sizeof(SCROLLINFO); scr.fMask = SIF_PAGE | SIF_RANGE; scr.nMin = 0; scr.nMax=40; scr.nPage=8; SetScrollInfo(hw,SB_VERT, & scr,TRUE); scr.fMask=SIF_POS; } void procVScroll(HWND hw, WPARAM wp,LPARAM lp){ switch(LOWORD(wp)){ case SB_TOP : scr.nPos = scr.nMin; break; case SB_BOTTOM : scr.nPos = scr.nMax; break; case SB_LINEUP : if(scr.nPos>0) scr.nPos--; break; case SB_LINEDOWN: if(scr.nPos<(scr.nMax-1)) scr.nPos++; break; case SB_PAGEUP : if(scr.nPos>=(int)scr.nPage) scr.nPos-=scr.nPage;break; case SB_PAGEDOWN: if((scr.nPos+(int)scr.nPage)<(scr.nMax-1)) scr.nPos +=scr.nPage;break; case SB_THUMBPOSITION:scr.nPos=HIWORD(wp); } SetScrollInfo(hw,SB_VERT, & scr,TRUE); wsprintf(str,TEXT(" Scroll = %d"),scr.nPos); InvalidateRect(hw,NULL,TRUE); } void procPaint(HWND hw, WPARAM wp,LPARAM lp){ PAINTSTRUCT ps; HDC hdc=BeginPaint(hw,&ps); TextOut(hdc,10,10,str, lstrlen(str)); EndPaint(hw,&ps); } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate (hw,wp,lp); return 0; case WM_VSCROLL : procVScroll(hw,wp,lp); return 0; case WM_PAINT : procPaint (hw,wp,lp); return 0; } return DefWindowProc(hw,msg,wp,lp); } (4) スクロールバーコントロール #include "myWin.h" #define SCROLL_1 1 static SCROLLINFO scr; static TCHAR str[128];static HWND scroll; void procCreate(HWND hw, WPARAM wp,LPARAM lp){ scroll= CreateWindow(TEXT("SCROLLBAR"),TEXT(""), WS_CHILD | WS_VISIBLE | SBS_HORZ, 0, 0, 200, 20, hw, (HMENU)SCROLL_1, ((LPCREATESTRUCT)(lp))->hInstance,NULL); scr.cbSize = sizeof(SCROLLINFO); scr.fMask=SIF_PAGE | SIF_RANGE; scr.nMin = 0; s cr.nMax=100; scr.nPage=10; SetScrollInfo(scroll,SB_CTL, & scr,TRUE); scr.fMask=SIF_POS; } void procHScroll(HWND hw, WPARAM wp,LPARAM lp){ switch(LOWORD(wp)){ case SB_LEFT : scr.nPos = scr.nMin; break; case SB_RIGHT : scr.nPos = scr.nMax; break; case SB_LINELEFT :if(scr.nPos>0) scr.nPos--;break; case SB_LINERIGHT:if(scr.nPos<(scr.nMax-1)) scr.nPos++;break; case SB_PAGELEFT :if(scr.nPos>=(int)scr.nPage) scr.nPos -=scr.nPage;break; case SB_PAGERIGHT: if((scr.nPos+(int)scr.nPage)<(scr.nMax-1)) scr.nPos +=scr.nPage;break; case SB_THUMBPOSITION:scr.nPos=HIWORD(wp); } SetScrollInfo(scroll,SB_CTL, & scr,TRUE); wsprintf(str,TEXT(" Scroll = %d"),scr.nPos); InvalidateRect(hw,NULL,TRUE); } void procPaint(HWND hw, WPARAM wp,LPARAM lp){ PAINTSTRUCT ps; HDC hdc=BeginPaint(hw,&ps); TextOut(hdc,30,30,str, lstrlen(str)); EndPaint(hw,&ps); } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate (hw,wp,lp); return 0; case WM_HSCROLL : procHScroll(hw,wp,lp); return 0; case WM_PAINT : procPaint (hw,wp,lp); return 0; } return DefWindowProc(hw,msg,wp,lp); } 4.2 スタティック #include "myWin.h" static HWND edit; static LPTSTR str=TEXT("For want of nail,\nthe shoe was lost."); void procCreate(HWND hw,WPARAM wp, LPARAM lp){ CreateWindow(TEXT("STATIC"),TEXT("Hellow Windows Programing used API"), WS_CHILD | WS_VISIBLE | WS_BORDER|SS_CENTER, 0, 0, 150, 50, hw, (HMENU)1, ((LPCREATESTRUCT)(lp))->hInstance, NULL); CreateWindow(TEXT("STATIC"),str, WS_CHILD | WS_VISIBLE | WS_BORDER|SS_CENTER, 0, 70, 150, 50, hw, (HMENU)1, ((LPCREATESTRUCT)(lp))->hInstance, NULL); } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate (hw,wp,lp);return 0; } return DefWindowProc(hw,msg,wp,lp); } 4.3 プッシュボタン (1) プッシュボタンを使う #include "myWin.h" #define BUTTON_0 0 #define BUTTON_1 1 void procCreate(HWND hw, WPARAM wp,LPARAM lp){ CreateWindow(TEXT("BUTTON"),TEXT("ボタン0"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0,0, 100,30,hw, (HMENU)BUTTON_0,((LPCREATESTRUCT)(lp))->hInstance, NULL); CreateWindow(TEXT("BUTTON"),TEXT("ボタン1"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0,30, 100,30,hw, (HMENU)BUTTON_1,((LPCREATESTRUCT)(lp))->hInstance,NULL); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ switch(LOWORD(wp)){ case BUTTON_0: MessageBox(hw,TEXT("ボタン0クリック"),TEXT("ボタン"),MB_OK); break; case BUTTON_1: MessageBox(hw,TEXT("ボタン1クリック"),TEXT("ボタン"),MB_OK); break; } } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate (hw,wp,lp); return 0; case WM_COMMAND : procCommand(hw,wp,lp); } return DefWindowProc(hw,msg,wp,lp); } 4.4 ラジオボタンとグループボックス (1) ラジオボタンを使う #include "myWin.h" #define RD_1 1 #define RD_2 2 HWND Radio1, Radio2; void procCreate(HWND hw,WPARAM wp, LPARAM lp){ Radio1=CreateWindow(TEXT("BUTTON"),TEXT("ラジオ1"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 0, 0, 100, 50, hw, (HMENU)RD_1, ((LPCREATESTRUCT)(lp))->hInstance, NULL); Radio2=CreateWindow(TEXT("BUTTON"),TEXT("ラジオ2"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 0, 80, 100, 50, hw, (HMENU)RD_2, ((LPCREATESTRUCT)(lp))->hInstance, NULL); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ TCHAR str[256]; int r1=SendMessage(Radio1,BM_GETCHECK,0,0L); int r2=SendMessage(Radio2,BM_GETCHECK,0,0L); wsprintf(str,TEXT(" Radio1 %d, Radio2 %d"),r1,r2); MessageBox(hw,str,TEXT("Radio"),MB_OK); } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate (hw,wp,lp);return 0; case WM_COMMAND : procCommand(hw,wp,lp);return 0; } return DefWindowProc(hw,msg,wp,lp); } (2) グループ化 #include "myWin.h" #define RD_11 11 #define RD_12 12 #define RD_21 21 #define RD_22 22 HWND Radio11, Radio12,Radio21,Radio22; void procCreate(HWND hw,WPARAM wp, LPARAM lp){ Radio11=CreateWindow(TEXT("BUTTON"),TEXT("ラジオ11"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON|WS_GROUP, 0, 0, 100, 30, hw, (HMENU)RD_11, ((LPCREATESTRUCT)(lp))->hInstance, NULL); Radio12=CreateWindow(TEXT("BUTTON"),TEXT("ラジオ12"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 0, 30, 100, 30, hw, (HMENU)RD_12, ((LPCREATESTRUCT)(lp))->hInstance, NULL); Radio21=CreateWindow(TEXT("BUTTON"),TEXT("ラジオ21"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON|WS_GROUP, 0, 70, 100, 30, hw, (HMENU)RD_21, ((LPCREATESTRUCT)(lp))->hInstance, NULL); Radio22=CreateWindow(TEXT("BUTTON"),TEXT("ラジオ22"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 0, 100, 100, 30, hw, (HMENU)RD_22, ((LPCREATESTRUCT)(lp))->hInstance, NULL); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ TCHAR str[256]; int r11=SendMessage(Radio11,BM_GETCHECK,0,0L); int r12=SendMessage(Radio21,BM_GETCHECK,0,0L); int r21=SendMessage(Radio21,BM_GETCHECK,0,0L); int r22=SendMessage(Radio22,BM_GETCHECK,0,0L); wsprintf(str,TEXT(" Radio11 %d, Radio12 %d\n Rado21 %d, Radio22 %d"), r11,r12,r21,r22); MessageBox(hw,str,TEXT("Radio"),MB_OK); } (3) グループボックス #include "myWin.h" #define BT_1 1 #define RD_11 11 #define RD_12 12 #define RD_21 21 #define RD_22 22 HWND Radio11, Radio12,Radio21,Radio22, group1,group2; void procCreate(HWND hw,WPARAM wp, LPARAM lp){ group1=CreateWindow(TEXT("BUTTON"),TEXT("グループ1"), WS_CHILD | WS_VISIBLE| BS_GROUPBOX, 10, 10, 150, 120, hw, NULL, ((LPCREATESTRUCT)(lp))->hInstance, NULL); group2=CreateWindow(TEXT("BUTTON"),TEXT("グループ2"), WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 180, 10, 150, 120, hw, NULL, ((LPCREATESTRUCT)(lp))->hInstance, NULL); Radio11=CreateWindow(TEXT("BUTTON"),TEXT("ラジオ11"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 20, 40, 100, 30, group1, (HMENU)RD_11, ((LPCREATESTRUCT)(lp))->hInstance, NULL); Radio12=CreateWindow(TEXT("BUTTON"),TEXT("ラジオ12"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 20, 70, 100, 30, group1, (HMENU)RD_12, ((LPCREATESTRUCT)(lp))->hInstance, NULL); Radio21=CreateWindow(TEXT("BUTTON"),TEXT("ラジオ21"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 20, 40, 100, 30, group2, (HMENU)RD_21, ((LPCREATESTRUCT)(lp))->hInstance, NULL); Radio22=CreateWindow(TEXT("BUTTON"),TEXT("ラジオ22"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 20, 70, 100, 30, group2, (HMENU)RD_22, ((LPCREATESTRUCT)(lp))->hInstance, NULL); CreateWindow(TEXT("BUTTON"),TEXT("ボタン"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 150, 100, 30, hw, (HMENU)BT_1, ((LPCREATESTRUCT)(lp))->hInstance, NULL); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ TCHAR str[256];int r1,r2, r3,r4; switch(LOWORD(wp)){ case BT_1: r1 = SendMessage(Radio11,BM_GETCHECK,0,0L); r2 = SendMessage(Radio12,BM_GETCHECK,0,0L); r3 = SendMessage(Radio21,BM_GETCHECK,0,0L); r4 = SendMessage(Radio22,BM_GETCHECK,0,0L); wsprintf(str,TEXT(" Radio11 %d, Radio12 %d \n Radio21 %d, Radio22 %d ") ,r1,r2,r3,r4); MessageBox(hw,str,TEXT("Radio"),MB_OK); } } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate (hw,wp,lp);return 0; case WM_COMMAND : procCommand(hw,wp,lp);return 0; } return DefWindowProc(hw,msg,wp,lp); } 4.5 チェックボックス (1) チェックボックスを使う #include "myWin.h" #define CH_1 1 #define CH_2 2 HWND Check1, Check2; void procCreate(HWND hw,WPARAM wp, LPARAM lp){ Check1=CreateWindow(TEXT("BUTTON"),TEXT("音楽鑑賞"), WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 20, 20, 100, 20, hw, (HMENU)CH_1, ((LPCREATESTRUCT)(lp))->hInstance, NULL); Check2=CreateWindow(TEXT("BUTTON"),TEXT("絵画鑑賞"), WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 20, 40, 100, 20, hw, (HMENU)CH_2, ((LPCREATESTRUCT)(lp))->hInstance, NULL); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ TCHAR str[256]; switch(LOWORD(wp)){ case CH_1: SendMessage(Check1,BM_SETCHECK, !SendMessage(Check1,BM_GETCHECK,0,0L),0L);return; Case CH_2: SendMessage(Check2,BM_SETCHECK, !SendMessage(Check2,BM_GETCHECK,0,0L),0L);return; } } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY: PostQuitMessage(0) ;return 0; case WM_CREATE : procCreate (hw,wp,lp);return 0; case WM_COMMAND: procCommand(hw,wp,lp);return 0; } return DefWindowProc(hw,msg,wp,lp); } (2) 3状態チェックボックス #include "myWin.h" int chInd(HWND ch){ int r=SendMessage(ch, BM_GETCHECK,0,0); if (r==BST_CHECKED )return BST_INDETERMINATE; else if(r==BST_UNCHECKED)return BST_CHECKED; else return BST_UNCHECKED; } void procCreate(HWND hw,WPARAM wp, LPARAM lp){ Check1=CreateWindow(TEXT("BUTTON"),TEXT("音楽鑑賞"), WS_CHILD | WS_VISIBLE | BS_3STATE, 20, 20, 100, 20, hw, (HMENU)CH_1, ((LPCREATESTRUCT)(lp))->hInstance, NULL); Check2=CreateWindow(TEXT("BUTTON"),TEXT("絵画鑑賞"), WS_CHILD | WS_VISIBLE | BS_3STATE, 20, 40, 100, 20, hw, (HMENU)CH_2, ((LPCREATESTRUCT)(lp))->hInstance, NULL); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ TCHAR str[256]; switch(LOWORD(wp)){ case CH_1: SendMessage(Check1,BM_SETCHECK,chInd(Check1),0L);return; case CH_2: SendMessage(Check2,BM_SETCHECK,chInd(Check2),0L);return; } } 4.6 エディットコントロール (3) プログラム例 #include "myWin.h" #define EDT 1 #define B_CUT 2 #define B_DEL 3 #define B_COPY 4 #define B_PASTE 5 #define B_UNDO 6 static HWND edit; void procCreate(HWND hw,WPARAM wp, LPARAM lp){ CreateWindow(TEXT("BUTTON"),TEXT("切り取り"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 100, 30, hw, (HMENU)B_CUT, ((LPCREATESTRUCT)(lp))->hInstance, NULL); CreateWindow(TEXT("BUTTON"),TEXT("削除"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 100, 0, 100, 30, hw, (HMENU)B_DEL, ((LPCREATESTRUCT)(lp))->hInstance, NULL); CreateWindow(TEXT("BUTTON"),TEXT("複写"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 200, 0, 100, 30, hw, (HMENU)B_COPY, ((LPCREATESTRUCT)(lp))->hInstance, NULL); CreateWindow(TEXT("BUTTON"),TEXT("貼り付け"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 300, 0, 100, 30, hw, (HMENU)B_PASTE, ((LPCREATESTRUCT)(lp))->hInstance, NULL); CreateWindow(TEXT("BUTTON"),TEXT("元に戻す"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 400, 0, 100, 30, hw, (HMENU)B_UNDO, ((LPCREATESTRUCT)(lp))->hInstance, NULL); edit=CreateWindow(TEXT("EDIT"),TEXT("エディットテキスト"), WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER | ES_AUTOHSCROLL | ES_AUTOVSCROLL| ES_LEFT | ES_MULTILINE | ES_OEMCONVERT | ES_WANTRETURN, 0,40, 400,300, hw, (HMENU)EDT, ((LPCREATESTRUCT)(lp))->hInstance, NULL); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ switch(LOWORD(wp)){ case B_CUT :SendMessage(edit,WM_CUT ,0,0);break; case B_DEL :SendMessage(edit,WM_CLEAR,0,0);break; case B_COPY :SendMessage(edit,WM_COPY ,0,0);break; case B_PASTE:SendMessage(edit,WM_PASTE,0,0);break; case B_UNDO :SendMessage(edit,WM_UNDO ,0,0);break; } } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate (hw,wp,lp);return 0; case WM_COMMAND : procCommand(hw,wp,lp);return 0; } return DefWindowProc(hw,msg,wp,lp); } (4) もうひとつの例 #include "myWin.h" #define ED_1 1 #define ED_2 2 static HWND edit1, edit2;TCHAR str[32768]; HWND edCreate(HWND hw, WPARAM wp,LPARAM lp, int x, int y,HMENU hm){ return CreateWindow(TEXT("EDIT") ,NULL, WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL| ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_LEFT|ES_MULTILINE, x,y,200,200,hw,hm,((LPCREATESTRUCT)(lp))->hInstance, NULL); } void procCreate(HWND hw, WPARAM wp,LPARAM lp){ edit1=edCreate(hw,wp,lp, 0,0,(HMENU)ED_1); edit2=edCreate(hw,wp,lp,200,0,(HMENU)ED_2); } void procCommand(HWND hw,WPARAM wp,LPARAM lp){ switch(LOWORD(wp)){ case ED_1: if(HIWORD(wp)==EN_UPDATE){ GetWindowText(edit1, str,32768); SetWindowText(edit2, str); } } } 4.7 リストボックス (1) リストボックスを使う #include "myWin.h" #define LIST_1 1 #define LIST_2 2 #define BT_1 11 #define NUMLIST 5 LPCTSTR str[NUMLIST]={TEXT("Tokyo"),TEXT("Ohsaka"),TEXT("Nagoya"), TEXT("Fukuoka"),TEXT("Sapporo")}; HWND sortL, noSortL; void procCreate(HWND hw, WPARAM wp,LPARAM lp){ sortL=CreateWindow(TEXT("LISTBOX"),NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, 10,10, 200,100,hw, (HMENU)LIST_1,((LPCREATESTRUCT)(lp))->hInstance, NULL); for(int i=0; ihInstance, NULL); for(int i=0; ihInstance, NULL); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ TCHAR str[128]; switch(LOWORD(wp)){ case BT_1: r1=SendMessage(sortL,LB_GETCURSEL,0,0L); r2=SendMessage(noSortL,LB_GETCURSEL,0,0L); wsprintf(str,TEXT(" リスト1選択=%d, リスト2選択=%d"),r1, r2); MessageBox(hw,str,TEXT("リスト2"),MB_OK); } } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate (hw,wp,lp); return 0; case WM_COMMAND : procCommand(hw,wp,lp); return 0; } return DefWindowProc(hw,msg,wp,lp); } (4) 文字列による項目の選択 #include "myWin.h" #define LS_1 1 #define ED_1 2 #define NUMLIST 5 LPCTSTR item[NUMLIST]={TEXT("abandon"),TEXT("abnomal"),TEXT("admisister"), TEXT("advantage"),TEXT("agreement")}; HWND list, edit; void procCreate(HWND hw, WPARAM wp,LPARAM lp){ list=CreateWindow(TEXT("LISTBOX"),NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, 10,30, 200,100, hw, (HMENU)LS_1,((LPCREATESTRUCT)(lp))->hInstance, NULL); for(int i=0;ihInstance, NULL); SendMessage(list,LB_SETCURSEL,0,0); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ int r1, r2;TCHAR str[128]; switch(LOWORD(wp)){ case ED_1: GetWindowText(edit, str,128); SendMessage(list,LB_SELECTSTRING,-1,(LPARAM)str); break; } } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate (hw,wp,lp); return 0; case WM_COMMAND : procCommand(hw,wp,lp); return 0; } return DefWindowProc(hw,msg,wp,lp); } (5) 複数選択リスト #include "myWin.h" #define LS_1 1 #define LBL_1 2 #define NUMLIST 5 LPCTSTR item[NUMLIST]={TEXT("abandon"),TEXT("abnomal"),TEXT("admisister"), TEXT("advantage"),TEXT("agreement")}; HWND list, label; void procCreate(HWND hw, WPARAM wp,LPARAM lp){ list=CreateWindow(TEXT("LISTBOX"),NULL, WS_CHILD|WS_VISIBLE|LBS_STANDARD|LBS_MULTIPLESEL, 10,30, 200,100,hw, (HMENU)LS_1,((LPCREATESTRUCT)(lp))->hInstance, NULL); for(int i=0; ihInstance, NULL); SendMessage(list,LB_SETCURSEL,0,0); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ TCHAR str[256]; lstrcpy(str,TEXT("")); for(int i=0;ihInstance, NULL); for(int i=0;ihInstance, NULL); for(int i=0;i WNDPROC stStaticProc; static HWND rc; void stProcNchitTest(HWND hw,WPARAM wp, LPARAM lp){ if(GetKeyState(VK_LBUTTON)<0) MessageBox(hw,TEXT("Sub Classification"),TEXT("左ボタン"),MB_OK); } //新しいスタティックコントロール用ウィンドウプロシージャ LRESULT CALLBACK StaticProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_NCHITTEST : stProcNchitTest(hw,wp,lp) ; return 0; } //以下,旧ウィンドウプロシージャの呼び出し return CallWindowProc(stStaticProc,hw,msg,wp,lp);// } void procCreate(HWND hw,WPARAM wp, LPARAM lp){ rc = CreateWindow(TEXT("STATIC"),TEXT("Hellow Windows!"), WS_CHILD | WS_VISIBLE | WS_BORDER|SS_CENTER, 0, 0, 150, 50, hw, (HMENU)1, ((LPCREATESTRUCT)(lp))->hInstance, NULL); stStaticProc=(WNDPROC)GetWindowLong(rc,GWL_WNDPROC); SetWindowLong(rc,GWL_WNDPROC,(LONG)StaticProc);//プロシージャ切り替え } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate (hw,wp,lp); return 0; } return DefWindowProc(hw,msg,wp,lp); }