【MFC系列1】之简单Win32程序
生活随笔
收集整理的這篇文章主要介紹了
【MFC系列1】之简单Win32程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、位運算
標志位組合:wParam = MK_RBUTTON|MK_CONTROL|MK_SHIFT
標志位的判斷:wParam & MK_LBUTTON
標志位的分離:wParam &= ~MK_RBUTTON;
二、調用約定
| 是C Declaration的縮寫(declaration,聲明),表示C語言默認的函數調用方法 | 是StandardCall的縮寫,是C++的標準調用方式 |
| a)所有參數從右到左依次入棧 | a)所有參數從右到左依次入棧,如果是調用類成員的話,最后一個入棧的是this指針 |
| b)這些參數由調用者清除,稱為手動清棧。 | b)這些堆棧中的參數由被調用的函數在返回后清除,使用的指令是 retnX,X表示參數占用的字節數,CPU在ret之后自動彈出X個字節的堆棧空間,稱為自動清棧。 |
| 被調用函數不會要求調用者傳遞多少參數,調用者傳遞過多或者過少的參數,甚至完全不同的參數都不會產生編譯階段的錯誤。 | 函數在編譯的時候就必須確定參數個數,并且調用者必須嚴格的控制參數的生成,不能多,不能少,否則返回后會出錯。 |
三、Unicode轉換
a)API:WideCharToMultiByte 與 MultiByteToWideChar
b)使用函數:T2A、W2A,聲明標識符 USES_CONVERSION
c)使用_bstr_t類
四、Win32程序模板
#define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #include <stdio.h> #include "resource.h" //hInstance :資源總管 double GetDlgItemDouble(HWND hwnd, UINT nID) {char s[256];GetDlgItemText(hwnd, nID, s, sizeof(s));return atof(s); } //由字符串轉化為整數:atoi 轉化為浮點數:atof //由整數轉化為字符串:itoa 浮點數轉化為字符串 沒有函數(ftoa) //sprintf函數能將各種類型的數字轉化為字符串:格式化函數 void SetDlgItemDouble(HWND hwnd, UINT nID,double db) {char s[256];sprintf(s,"%lf", db);SetDlgItemText(hwnd, nID, s); }INT_PTR CALLBACK theProc( HWND hwndDlg,UINT uMsg, WPARAM wParam, LPARAM lParam ) {//消息回調函數switch (uMsg){case WM_COMMAND://命令消息if (LOWORD(wParam) == IDOK){double nLeft = GetDlgItemDouble(hwndDlg, IDC_LEFT1);double nRight = GetDlgItemDouble(hwndDlg, IDC_RIGHT1);SetDlgItemDouble(hwndDlg, IDC_RESULT1, nLeft + nRight);nLeft = GetDlgItemDouble(hwndDlg, IDC_LEFT2);nRight = GetDlgItemDouble(hwndDlg, IDC_RIGHT2);SetDlgItemDouble(hwndDlg, IDC_RESULT2, nLeft - nRight);nLeft = GetDlgItemDouble(hwndDlg, IDC_LEFT3);nRight = GetDlgItemDouble(hwndDlg, IDC_RIGHT3);SetDlgItemDouble(hwndDlg, IDC_RESULT3, nLeft * nRight);nLeft = GetDlgItemDouble(hwndDlg, IDC_LEFT4);nRight = GetDlgItemDouble(hwndDlg, IDC_RIGHT4);if (nRight != 0)SetDlgItemDouble(hwndDlg, IDC_RESULT4, nLeft / nRight);elseSetDlgItemText(hwndDlg, IDC_RESULT4, "除數不能為0");return TRUE;}if (LOWORD(wParam) == IDCANCEL){EndDialog(hwndDlg, IDCANCEL);return TRUE;// MessageBox(hwndDlg, "你點擊了Cancel", "臨時", 0);}if (LOWORD(wParam) == ID_EXIT){EndDialog(hwndDlg, IDCANCEL);return TRUE;}break;}return FALSE;//FALSE代表缺省的處理由系統完成 }int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrev ,LPSTR lpCmd,int nCmdShow) {//MessageBox FindWindowDialogBox(hInstance,(LPCTSTR)IDD_MAIN_DLG,NULL, theProc);return 0; }總結
以上是生活随笔為你收集整理的【MFC系列1】之简单Win32程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平安口袋银行app怎么打不开
- 下一篇: 【MFC系列2】Win32项目转换为MF