《Windows程式設計》之非模態對話方塊

來源:互聯網
上載者:User
#include <Windows.h>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);BOOL CALLBACK ColorScrDlg(HWND,UINT,WPARAM,LPARAM);HWND hDlgModeless;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){static TCHAR szAppName[]=TEXT("Color2");MSG msg;HWND hwnd;WNDCLASS wndclass;wndclass.style=CS_VREDRAW|CS_HREDRAW;wndclass.lpfnWndProc=WndProc;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hbrBackground=CreateSolidBrush(0L);wndclass.hInstance=hInstance;wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.lpszMenuName=NULL;wndclass.lpszClassName=szAppName;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);return 0;}         //WS_CLIPCHILDREN作用在不擦出對話方塊的前提下重繪方視窗         hwnd=CreateWindow(szAppName,TEXT("Color Scroll"),WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd);hDlgModeless=CreateDialog(hInstance,TEXT("ColorScrDlg"),hwnd,ColorScrDlg);while(GetMessage(&msg,NULL,0,0)){//這個地方來判斷訊息迴圈是不是對話方塊的if(hDlgModeless==0||!IsDialogMessage(hDlgModeless,&msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){switch(message){case WM_DESTROY://關閉前先把類的背景刷子給換掉,刪掉建立的DeleteObject((HGDIOBJ)SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)GetStockObject(WHITE_BRUSH)));PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,message,wParam,lParam);}BOOL CALLBACK ColorScrDlg(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam){static int iColor[3];HWND hwndParent,hCtrl;int iCtrlID,iIndex;switch(message){case WM_INITDIALOG:for(iCtrlID=10;iCtrlID<13;iCtrlID++){//iCtrlID與資源中的是相對應的//擷取控制代碼hCtrl=GetDlgItem(hDlg,iCtrlID);//設定範圍SetScrollRange(hCtrl,SB_CTL,0,255,FALSE);//設定起始點SetScrollPos(hCtrl,SB_CTL,0,FALSE);}return TRUE;case WM_VSCROLL://lParam傳遞進來的是控制代碼hCtrl=(HWND)lParam;//擷取ID號,這裡的hCtrl是視窗上三個捲軸iCtrlID=GetWindowLong(hCtrl,GWL_ID);iIndex=iCtrlID-10;//hwndParent是顯示顏色變化的那個視窗控制代碼hwndParent=GetParent(hDlg);//wParam低位是控制switch(LOWORD(wParam)){//這個case語句後沒有break,直接觸發SB_LINEDOWN來再向下移動1,//並且判斷是否是最低了case SB_PAGEDOWN:iColor[iIndex]+=15;//滑鼠點擊捲軸向下的按鈕case SB_LINEDOWN:iColor[iIndex]=min(255,iColor[iIndex]+1);break;case SB_PAGEUP:iColor[iIndex]-=15;case SB_LINEUP:iColor[iIndex]=max(0,iColor[iIndex]-1);break;case SB_TOP:iColor[iIndex]=0;break;case SB_BOTTOM:iColor[iIndex]=255;break;case SB_THUMBPOSITION:case SB_THUMBTRACK://wParam高位滑鼠點擊的位置iColor[iIndex]=HIWORD(wParam);break;default:return FALSE;}SetScrollPos(hCtrl,SB_CTL,iColor[iIndex],TRUE);//設定相應的每個捲軸下面的數字SetDlgItemInt(hDlg,iCtrlID+3,iColor[iIndex],FALSE);//替換與類有關的背景的刷子,刪除返回的刷子控制代碼DeleteObject((HGDIOBJ)SetClassLong(hwndParent,GCL_HBRBACKGROUND,(LONG)CreateSolidBrush(RGB(iColor[0],iColor[1],iColor[2]))));//重繪InvalidateRect(hwndParent,NULL,TRUE);return TRUE;}return FALSE;}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.