国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

這篇具有很好參考價(jià)值的文章主要介紹了面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

源自網(wǎng)絡(luò)收集,僅供參考

實(shí)驗(yàn)三收集到兩份完整報(bào)告,這是其一,另一份見本專欄下一篇文章。

實(shí)驗(yàn)題目

《面向?qū)ο蟪绦蛟O(shè)計(jì)》 實(shí)驗(yàn)三

實(shí)驗(yàn)題目:子窗口與控件的基本用法、資源的使用

整體目的:理解、窗口之間的消息傳送、調(diào)用棧;掌握光標(biāo)、圖標(biāo)、菜單的制作和使用方式;掌握菜單的響應(yīng)方式、快捷菜單的載入及使用方式;理解GetWindowLong/SetWindowLong, GetClassLong/SetClassLong函數(shù)的用法。

實(shí)驗(yàn)內(nèi)容過程:

改進(jìn)ChildWin示例程序,在子窗口內(nèi)顯示出窗口特定信息(窗口ID號);嘗試在每個(gè)子窗口中繪制特定顏色的矩形

    • 在子窗口的窗口過程函數(shù)的刷新處理消息中增添處理代碼;
    • 用GetWindowLong函數(shù)取出子窗口ID;
    • 根據(jù)子窗口ID設(shè)定子窗口內(nèi)需要顯示的信息(使用wsprintf函數(shù)組織待顯示的字符串)
    • 嘗試在子窗口中繪制特定顏色的矩形(使用CreateSolidBrush、Rectangle函數(shù))
  1. 跟蹤消息傳遞過程
    • 在Childwin的主窗口過程函數(shù)的WM_CREATE、WM_PAINT、WM_COMMAND、WM_LBUTTONDOWN處設(shè)置斷點(diǎn)
    • 在子窗口的WM_CREATE、WM_PAINT、WM_CHILDWIN、WM_LBUTTONDOWN處設(shè)置斷點(diǎn)
    • 運(yùn)行程序,查看各斷點(diǎn)的響應(yīng)過程,以此理解消息傳遞的次序
  2. 設(shè)計(jì)、實(shí)現(xiàn)一個(gè)軟鍵盤

用子窗口實(shí)現(xiàn)一個(gè)軟鍵盤(在窗口的客戶區(qū)用子窗口繪制一個(gè)仿真的鍵盤),鼠標(biāo)點(diǎn)擊每個(gè)子窗口,可輸入不同的字符。將輸入的字符顯示到窗口中。

  1. 在自己的工作目錄中建立新工程用于控件測試〔可以將Easywin工程的easywin.c拷貝到新工程的目錄中,修改文件名為ctltest.cpp(后綴名改為.cpp),編譯、鏈接并使程序正常工作(包括修正編譯錯(cuò)誤)〕。
  2. * 用Button完成4*所要求的軟鍵盤實(shí)現(xiàn)。比較與原有實(shí)現(xiàn)的不同之處。
  3. 創(chuàng)建各種類型的控件子窗口,包括static、edit、listbox、combobox、button、scrollbar等;在主窗口的窗口過程函數(shù)中增加相應(yīng)的消息處理實(shí)現(xiàn)主窗口與子窗口的通信(可嘗試設(shè)置控件的標(biāo)題/內(nèi)容,獲取控件的標(biāo)題/內(nèi)容以及在控件有點(diǎn)擊等操作時(shí)在主窗口給出提示)。
  4. 同步驟5,新建用于資源測試的工程。
  5. 增加新的資源:光標(biāo)、圖標(biāo),并正確顯示
    • 用資源編輯器編輯一個(gè)光標(biāo)(彩色),注意刪除資源中不需要的image類型,否則顯示光標(biāo)可能不正確。
    • 為光標(biāo)設(shè)定熱點(diǎn)(hot spot)
    • 用資源編輯器編輯一個(gè)圖標(biāo)
    • 修改注冊窗口類的代碼,使程序能正常使用自定義的光標(biāo)和圖標(biāo)
    • 用DrawIcon函數(shù),在WM_PAINT消息中增加處理,在窗口客戶區(qū)中顯示自定義的光標(biāo)及圖標(biāo)。
    • 創(chuàng)建一個(gè)另外光標(biāo)供后續(xù)實(shí)驗(yàn)步驟使用
  6. 增加菜單
    • 菜單中建立一個(gè)菜單項(xiàng)命令以修改窗口使用的光標(biāo),可命名為“ChangeCursor”,對應(yīng)的ID假設(shè)為ID_CHANGECURSOR
    • 修改注冊窗口類的代碼,使程序運(yùn)行時(shí)能正確載入菜單
    • 換一種方式,通過修改創(chuàng)建窗口(CreateWindow的代碼,使菜單能正確載入
  7. 增加菜單消息響應(yīng)代碼
    • 增加WM_COMMAND的消息處理
    • 參照第五章菜單示例代碼中的處理方式,響應(yīng)菜單命令
    • 對ID_CHANGECURSOR命令的響應(yīng)為:改變窗口使用的光標(biāo),可以使用SetClassLong (hwnd,? GCL_HCURSOR,
      ???????? ???????? ???????? (LONG)LoadCursor((HINSTANCE)GetWindowLong(hwnd,? GWL_HINSTANCE),
      ???????? ???????? ???????? ??????? ???????? ???????? ???????? ???????? MAKEINTRESOURCE(IDC_CURSOR2) ) );
  8. 處理鼠標(biāo)右鍵,增加快捷菜單處理
    • 右鍵發(fā)出的菜單命令同樣是通過WM_COMMAND消息響應(yīng)的,增加快捷菜單之后,程序應(yīng)該能通過主菜單或快捷菜單兩種方式發(fā)出同樣的命令
  9. 將本次實(shí)驗(yàn)做好的工程的編譯、鏈接增加到程序構(gòu)建使用的批處理文件中,用批處理文件一次性自動(dòng)構(gòu)建實(shí)驗(yàn)一、二、三的所有工程。
  10. 本次實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告上交時(shí)間為10月22日 21:30之前。

注意:

  1. 5* 選做。
  2. 做好各次實(shí)驗(yàn)的備份,每次實(shí)驗(yàn)課時(shí)攜帶所有先前實(shí)驗(yàn)的實(shí)驗(yàn)成果(電子版)備查。
  3. 實(shí)驗(yàn)報(bào)告文檔格式、文件名應(yīng)符合要求。

實(shí)驗(yàn)報(bào)告1(另一份報(bào)告見本專欄下一篇文章)

  1. 實(shí)驗(yàn)要求

理解、窗口之間的消息傳送、調(diào)用棧;掌握光標(biāo)、圖標(biāo)、菜單的制作和使用方式;掌握菜單的響應(yīng)方式、快捷菜單的載入及使用方式;理解GetWindowLong/SetWindowLong, GetClassLong/SetClassLong函數(shù)的用法。

2,實(shí)驗(yàn)過程及結(jié)果

2.1創(chuàng)建工程

面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

2.2程序流程和數(shù)據(jù)模型分析

  1. 改進(jìn)ChildWin示例程序,在子窗口內(nèi)顯示出窗口特定信息(窗口ID號);嘗試在每個(gè)子窗口中繪制特定顏色的矩形
    • 在子窗口的窗口過程函數(shù)的刷新處理消息中增添處理代碼;
    • 用GetWindowLong函數(shù)取出子窗口ID;
    • 根據(jù)子窗口ID設(shè)定子窗口內(nèi)需要顯示的信息(使用wsprintf函數(shù)組織待顯示的字符串)
    • 嘗試在子窗口中繪制特定顏色的矩形(使用CreateSolidBrush、Rectangle函數(shù))面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

    ?

2.跟蹤消息傳遞過程

在Childwin的主窗口過程函數(shù)的WM_CREATE、WM_PAINT、WM_COMMAND、

    • WM_LBUTTONDOWN處設(shè)置斷點(diǎn)
    • 在子窗口的WM_CREATE、WM_PAINT、WM_CHILDWIN、WM_LBUTTONDOWN處設(shè)置斷點(diǎn)
    • 運(yùn)行程序,查看各斷點(diǎn)的響應(yīng)過程,以此理解消息傳遞的次序

3.設(shè)計(jì)、實(shí)現(xiàn)一個(gè)軟鍵盤

用子窗口實(shí)現(xiàn)一個(gè)軟鍵盤(在窗口的客戶區(qū)用子窗口繪制一個(gè)仿真的鍵盤),鼠標(biāo)點(diǎn)擊每個(gè)子窗口,可輸入不同的字符。將輸入的字符顯示到窗口中。面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

4.在自己的工作目錄中建立新工程用于控件測試〔可以將Easywin工程的easywin.c拷貝到新工程的目錄中,修改文件名為ctltest.cpp(后綴名改為.cpp),編譯、鏈接并使程序正常工作(包括修正編譯錯(cuò)誤)〕

面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

?

  • * 用Button完成4*所要求的軟鍵盤實(shí)現(xiàn)。比較與原有實(shí)現(xiàn)的不同之處。
  • 創(chuàng)建各種類型的控件子窗口,包括static、edit、listbox、combobox、button、scrollbar等;在主窗口的窗口過程函數(shù)中增加相應(yīng)的消息處理實(shí)現(xiàn)主窗口與子窗口的通信(可嘗試設(shè)置控件的標(biāo)題/內(nèi)容,獲取控件的標(biāo)題/內(nèi)容以及在控件有點(diǎn)擊等操作時(shí)在主窗口給出提示)。面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

?

  • 同步驟4,新建用于資源測試的工程。
  • 增加新的資源:光標(biāo)、圖標(biāo),并正確顯示
    • 用資源編輯器編輯一個(gè)光標(biāo)(彩色),注意刪除資源中不需要的image類型,否則顯示光標(biāo)可能不正確。
    • 為光標(biāo)設(shè)定熱點(diǎn)(hot spot)
    • 用資源編輯器編輯一個(gè)圖標(biāo)
    • 修改注冊窗口類的代碼,使程序能正常使用自定義的光標(biāo)和圖標(biāo)
    • 用DrawIcon函數(shù),在WM_PAINT消息中增加處理,在窗口客戶區(qū)中顯示自定義的光標(biāo)及圖標(biāo)。
    • 創(chuàng)建一個(gè)另外光標(biāo)供后續(xù)實(shí)驗(yàn)步驟使用

面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

?面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

?

?面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

?面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

?面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

9. 增加菜單

  • 增加菜單
    • 菜單中建立一個(gè)菜單項(xiàng)命令以修改窗口使用的光標(biāo),可命名為“ChangeCursor”,對應(yīng)的ID假設(shè)為ID_CHANGECURSOR
    • 修改注冊窗口類的代碼,使程序運(yùn)行時(shí)能正確載入菜單
    • 換一種方式,通過修改創(chuàng)建窗口(CreateWindow的代碼,使菜單能正確載入

面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

?

  • 增加菜單消息響應(yīng)代碼
    • 增加WM_COMMAND的消息處理
    • 參照第五章菜單示例代碼中的處理方式,響應(yīng)菜單命令
    • 對ID_CHANGECURSOR命令的響應(yīng)為:改變窗口使用的光標(biāo),可以使用SetClassLong (hwnd,? GCL_HCURSOR,
      ???????? ???????? ???????? (LONG)LoadCursor((HINSTANCE)GetWindowLong(hwnd,? GWL_HINSTANCE),
      ???????? ???????? ???????? ??????? ???????? ???????? ???????? ???????? MAKEINTRESOURCE(IDC_CURSOR2) ) );

面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

?

  1. 處理鼠標(biāo)右鍵,增加快捷菜單處理

右鍵發(fā)出的菜單命令同樣是通過WM_COMMAND消息響應(yīng)的,增加快捷菜單之后,程序應(yīng)該能通過主菜單或快捷菜單兩種方式發(fā)出同樣的命令

面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1

?

  • 將本次實(shí)驗(yàn)做好的工程的編譯、鏈接增加到程序構(gòu)建使用的批處理文件中,用批處理文件一次性自動(dòng)構(gòu)建實(shí)驗(yàn)一、二、三的所有工程。

2.3問題及解決方案

  1. 在主窗口設(shè)置的光標(biāo)無法在子窗口顯示,為了在子窗口設(shè)置自己的光標(biāo),我使用了全局變量進(jìn)行編寫子窗口的光標(biāo)程序;
  2. 由于paint中我使用了if條件語句,導(dǎo)致本軟鍵盤第一個(gè)按鍵無法作用,按下后無法刷新,所以將所有字母向后移動(dòng)一位(也可以不后移,設(shè)置全局變量代替if語句進(jìn)行繪制判斷即可);
  3. 快捷方式寫好后無法運(yùn)行,經(jīng)檢查為????? g_hSubMenu = GetSubMenu(g_hMenu, 0);語句寫在return語句后面,導(dǎo)致無法正常運(yùn)行,但系統(tǒng)又無法報(bào)錯(cuò)。

3.實(shí)驗(yàn)總結(jié)

在本次試驗(yàn)中,我不僅將老師上課所講的窗口知識和菜單知識進(jìn)行實(shí)踐的運(yùn)用,掌握了繪制光標(biāo),繪制圖標(biāo)的能力,掌握了菜單的制作和使用、響應(yīng)方式,快捷菜單的載入及使用方式,還通過上網(wǎng)搜索等方法了解了許多課外函數(shù),如:GetCursorPos(),TrackPopupMenu()等。不僅鍛煉了自己的獨(dú)立思考能力還拓寬了眼界。文章來源地址http://www.zghlxwxcb.cn/news/detail-468949.html

附錄 關(guān)鍵代碼
軟鍵盤繪制代碼:
case WM_PAINT:
		GetClientRect(hWnd, &rect);
		hdc = BeginPaint(hWnd, &ps);
		if (!(LOWORD(wParam) == nChildWin_ID))
		{
			string[n] = number + 65;
			n++;
			DrawText(hdc, string, n, &rect, DT_SINGLELINE);
			
			
		}	
		DrawIcon(hdc,1,1, LoadIcon(hin, MAKEINTRESOURCE(IDI_ICON1)));
		EndPaint(hWnd, &ps);
		return 0;
子窗口命中寫入代碼:
case WM_COMMAND:                
		if (!(LOWORD(wParam) == nChildWin_ID))
		{
			SendMessage((HWND)hChildWnd[nCol][nRow], WM_CHILDWIN, 0, 0L);

		
			nChildWin_ID = LOWORD(wParam);
			nCol = nChildWin_ID >> 4;
			nRow = (nChildWin_ID > 15) ? (nChildWin_ID - 4) : nChildWin_ID;
		}
		else
		{
			switch (wParam)
			{
			case ID_CHANGECURSOR:
				SetClassLong(hWnd, GCL_HCURSOR,
					(LONG)LoadCursor((HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
						MAKEINTRESOURCE(IDC_CURSOR1)));
				break;
			
			}
		}
		InvalidateRect(hWnd, NULL, TRUE);
		return 0;
主窗口繪制菜單,光標(biāo),圖形代碼:
 wcMain.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));
	wcMain.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE (IDC_CURSOR2));
	wcMain.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wcMain.lpszMenuName =  MAKEINTRESOURCE(IDR_MENU3);





改變光標(biāo)菜單代碼:
case WM_COMMAND:                 
			
		if (!(LOWORD(wParam) == nChildWin_ID))
		{
			SendMessage((HWND)hChildWnd[nCol][nRow], WM_CHILDWIN, 0, 0L);

			
			nChildWin_ID = LOWORD(wParam);
			nCol = nChildWin_ID >> 4;
			nRow = (nChildWin_ID > 15) ? (nChildWin_ID - 4) : nChildWin_ID;
		}
		else
		{
			switch (wParam)
			{
			case ID_CHANGECURSOR:
				SetClassLong(hWnd, GCL_HCURSOR,
					(LONG)LoadCursor((HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
						MAKEINTRESOURCE(IDC_CURSOR1)));
				break;
			
			}
		}
		InvalidateRect(hWnd, NULL, TRUE);
		return 0;
右鍵快捷菜單代碼:
	case WM_RBUTTONDOWN:
			GetCursorPos(&stPos);
			TrackPopupMenu(g_hSubMenu,TPM_LEFTALIGN,stPos.x,stPos.y,NULL,hWnd,NULL);
			break;

到了這里,關(guān)于面向?qū)ο缶幊?實(shí)驗(yàn)三 sduwh 子窗口與控件的基本用法、資源的使用 參考實(shí)驗(yàn)報(bào)告1的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包