Windows通訊機制和DLL機制

來源:互聯網
上載者:User

DLL

<1>event.h

#include<windows.h>#include<math.h>#ifndef LIB_H#define LIB_Hextern "C" void  _declspec(dllexport)setCalculate(HWND  hwnd,HWND  hwnd1,HWND  hwnd2,HWND  hwnd3,HWND  hwnd4);extern "C" void  _declspec(dllexport)setClearAll(HWND  hwnd1,HWND  hwnd2,HWND  hwnd3,HWND  hwnd4);#endif

 

<2>event.cpp

#include"event.h"char Money[] = "";char Rate[] = "";char Year[] = "";char Total[] = "";/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                                     ++         *主函數:Check                                              + +         *功能:  輸入判斷函數                                       ++         *參數:  a[]             輸入的字串                       ++         *傳回值:全是數字返回TRUE 否則返回FALSE                     ++                                                                     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/BOOL Check(char a[])                                                            {int i;int len = strlen(a);for(i=0;i<len;i++){if(a[i]>'9'||a[i]<'0'){return FALSE;}}return TRUE;}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                                     ++         *主函數:setCalculate                                       + +         *功能:  為CalculateButton添加響應                          ++                  輸入本金,利率,年 輸出總錢數                      ++         *參數:   hwnd             父視窗控制代碼                       ++                   hwnd1            本金輸入框控制代碼                   ++hwnd2            利率輸入框控制代碼                   ++hwnd3            年數輸入框控制代碼                   +  +hwnd4            輸出框控制代碼                       ++         *傳回值:                                                   ++                                                                     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/void setCalculate(HWND hwnd,HWND  hwnd1,HWND  hwnd2,HWND  hwnd3,HWND  hwnd4){GetWindowText(hwnd1,Money,20);    GetWindowText(hwnd2,Rate,20);GetWindowText(hwnd3,Year,20);    double totalMoney;if(Check(Money)&&Check(Rate)&&Check(Year)){totalMoney = atof(Money)*pow(1/atof(Rate)+1,atoi(Year));gcvt(totalMoney,10,Total);SetWindowText(hwnd4,Total);}else{MessageBox(hwnd,TEXT("對不起,你輸入的格式不對"),TEXT("提示"),MB_OK);SetWindowText(hwnd1,"");SetWindowText(hwnd2,"");SetWindowText(hwnd3,"");SetWindowText(hwnd4,"");}}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                                     ++         *主函數:setClearAll                                        + +         *功能:  為ClearButton添加響應                              ++                   清空所有輸入框輸出框                              ++         *參數:   hwnd1            本金輸入框控制代碼                   ++hwnd2            利率輸入框控制代碼                   ++hwnd3            年數輸入框控制代碼                   +  +hwnd4            輸出框控制代碼                       ++         *傳回值:                                                   ++                                                                     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/void setClearAll(HWND  hwnd1,HWND  hwnd2,HWND  hwnd3,HWND  hwnd4){SetWindowText(hwnd1,"");SetWindowText(hwnd2,"");SetWindowText(hwnd3,"");SetWindowText(hwnd4,"");}

 

window

<1>window.h

//windows程式的標頭檔#include<windows.h>extern char szTitle[];                                           //標題條字串extern char szWindowClass[];                                     //視窗類別名extern  char szMenuName[] ; extern  int ID,ID_1;//函數原型聲明ATOM    InitApplication(HINSTANCE);                              //用來註冊視窗類別BOOL     InitInstance(HINSTANCE ,  int);                          //用來建立主視窗LRESULT CALLBACK WndProc( HWND,  UINT,  WPARAM,  LPARAM);       //訊息處理函數int   APIENTRY WinMain(  HINSTANCE ,  HINSTANCE ,  LPSTR ,  int);  //主函數BOOL  CreateControl(HINSTANCE,HWND, LPSTR);                       //建立文字框                                            

 

<2>window.cpp

#include "window.h"#include<math.h>//全域變數char szTitle[] = "Windows通訊機制和DLL機制";                           //標題條字串char szWindowClass[] = "w32";                                                  //視窗類別名char szMenuName[] = "NULL";                                                  //菜單名typedef void (*lpsetCalculateFun)(HWND ,HWND ,HWND ,HWND ,HWND);typedef void (*lpsetClearAllFun)(HWND ,HWND ,HWND ,HWND);HWND hwnd1,hwnd2,hwnd3,hwnd4,calculateButton,clearButton;HWND hwnd;    /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                                               ++         *主函數:WinMain                                                      + +         *功能:   初始化及註冊視窗類別,建立視窗,進入訊息迴圈及終止應用程式    ++         *參數:   hInstance             當前執行個體                              ++                       hPrevInstance       前一個執行個體                          + +                       lpCmdLine          命令列                               + +                       nCmdShow           選擇顯示視窗或表徵圖                   +  +         *傳回值:msg.wParam                                                   ++                                                                               +++++++++++++++++++++++++++++++++++++++++++++++++*+++++++++++++++++++++++++++++++*/int APIENTRY WinMain(HINSTANCE     hInstance,    HINSTANCE  hPrevInstance ,    LPSTR    lpCmdLine ,    int   nCmdShow ){MSG msg;                                                                         //聲明訊息結構對象InitApplication( hInstance);                                                  //註冊視窗if(   !InitInstance(  hInstance,  nCmdShow  )   )                   //初始化{return FALSE;}while (  GetMessage(&msg, (HWND) NULL, 0, 0)  )             //訊息迴圈{TranslateMessage(&msg);                                              //檢索訊息                                              DispatchMessage(&msg);                                              //將訊息間接傳給函數指標}return  msg.wParam;                                                          //結束訊息迴圈傳回PostQuitMesage }/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                                          ++         *主函數:InitApplication                                         + +         *功能:   用來註冊視窗類別                                         ++         *參數:   hInstance             當前執行個體                         ++         *傳回值:如果成功,返回一個唯一的整數,如果失敗,返回0           ++                                                                          +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ATOM InitApplication(HINSTANCE     hInstance){WNDCLASS wc;                                                                                //聲明視窗結構對象//初始化對象的域值wc.style                      =              CS_HREDRAW | CS_VREDRAW;                       // 如果大小改變了重繪視窗 wc.lpfnWndProc                =             WndProc;                                        //視窗訊息處理函數wc.cbClsExtra                 =              0;                                             // 無附加視窗類別記憶體 wc.cbWndExtra                 =              0;                                             // 無附加視窗記憶體wc.hInstance                  =              hInstance;                                     //當前執行個體wc.hIcon                      =              LoadIcon(NULL,  IDI_APPLICATION);              // 表徵圖wc.hCursor                    =              LoadCursor(NULL, IDC_ARROW);                   // 滑鼠指標wc.hbrBackground              =              (HBRUSH)GetStockObject(WHITE_BRUSH);           // 背景畫刷wc.lpszClassName              =               szWindowClass;                                // 視窗類別名wc.lpszMenuName               =               szMenuName;                                   //菜單名return  RegisterClass(&wc);                                                                 //註冊}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                                      ++         *主函數:InitInstance                                        + +         *功能:   用來建立主視窗                                     ++         *參數:   hInstance             當前執行個體                     ++                       nCmdShow           選擇顯示視窗或表徵圖          ++         *傳回值:如果成功,返回一個非零值,如果失敗,返回0           ++                                                                      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/BOOL InitInstance(HINSTANCE     hInstance,      int   nCmdShow){                                                       //聲明視窗控制代碼hwnd   =  CreateWindow( szWindowClass,                                              // 視窗類別名,使用之前註冊的主視窗類     szTitle,                                                    // 視窗名,顯示在視窗標題列上的字串     WS_OVERLAPPEDWINDOW |WS_VSCROLL|WS_HSCROLL,                 //顯示方式    具有水平和垂直滾動     CW_USEDEFAULT,                                              // x起點座標     CW_USEDEFAULT,                                              // y起點座標    400,                                                         // 寬     300,                                                        // 高    NULL,                                                        // 無父視窗    NULL,                                                        // 菜單控制代碼    hInstance,                                                   //執行個體控制代碼    NULL                                                         // 無視窗建立資料);if(!hwnd)                                                            // 判斷是否建立成功{return FALSE;}    CreateControl( hInstance,  hwnd, NULL);ShowWindow(hwnd,  nCmdShow);                                          //建立成功便顯示視窗UpdateWindow(hwnd);                                                    //送出WM_PAINT訊息return  TRUE;}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                                  ++         *主函數:CreateControl                                   + +         *功能:   建立文字框                                     ++         *參數:   hwndp            父視窗控制代碼                    ++                   szTitle          視窗標題                      ++         *傳回值:                                                ++                                                                  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/BOOL  CreateControl(HINSTANCE     hInstance,    HWND hwndp,    LPSTR szTitle){hwnd1   =  CreateWindow( "edit",NULL,  WS_CHILD |WS_VISIBLE|WS_BORDER,                        50, 40,100, 20,                                                                                                                                                           hwndp, NULL,hInstance, NULL);calculateButton   =  CreateWindow( "BUTTON","計算",  WS_CHILD |WS_VISIBLE|WS_BORDER,                        180, 40,60, 20,                                                                                                                                                           hwndp, NULL,hInstance, NULL);clearButton   =  CreateWindow( "BUTTON","清除",  WS_CHILD |WS_VISIBLE|WS_BORDER,                        180, 70,60, 20,                                                                                                                                                           hwndp, NULL,hInstance, NULL);   hwnd2   =  CreateWindow( "edit",NULL,  WS_CHILD |WS_VISIBLE|WS_BORDER,                        50, 70,100, 20,                                                                                                                                                           hwndp, NULL,hInstance, NULL);     hwnd3   =  CreateWindow( "edit",NULL,  WS_CHILD |WS_VISIBLE|WS_BORDER,                        50, 100,100, 20,                                                                                                                                                           hwndp, NULL,hInstance, NULL);    hwnd4   =  CreateWindow( "EDIT",NULL,  WS_CHILD |WS_VISIBLE|WS_VSCROLL|WS_BORDER|ES_LEFT|ES_MULTILINE|ES_AUTOVSCROLL,                        50, 130,300, 100,                                                                                                                                                           hwndp, NULL,hInstance, NULL);ShowWindow(hwnd1,  SW_SHOW);   ShowWindow(calculateButton,  SW_SHOW); ShowWindow(clearButton,  SW_SHOW); ShowWindow(hwnd2,  SW_SHOW);  ShowWindow(hwnd3,  SW_SHOW);  ShowWindow(hwnd4,  SW_SHOW);  return  TRUE;}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                                     ++         *主函數:WndProc                                            + +         *功能:   訊息處理函數                                      ++         *參數:  hwnd              執行個體控制代碼                         ++                  message          訊息                              ++                  wParam           MSG訊息結構中的域                 ++                  lParam           MSG訊息結構中的域                 ++         *傳回值:0                                                  ++                                                                     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/LRESULT  CALLBACK WndProc(HWND  hwnd , UINT   message, WPARAM   wParam, LPARAM    lParam){PAINTSTRUCT    ps;HDC  hdc;switch(message){case WM_PAINT:hdc = BeginPaint(hwnd, &ps);TextOut(hdc, 150 , 10, "利息計算機", strlen("利息計算機"));TextOut(hdc, 10 , 40, "本金:", strlen("本金:"));TextOut(hdc, 10 , 70, "利率:", strlen("利率:"));TextOut(hdc, 10 , 100, "年:", strlen("年:"));EndPaint(hwnd,&ps);break;case WM_COMMAND:HINSTANCE hDll;    lpsetCalculateFun setCalculateFun;lpsetClearAllFun setClearAllFun;    hDll = LoadLibrary("..\\DLL\\Debug\\DLL.dll");                                 //獲得DLL模組控制代碼    if(hDll!=NULL){setCalculateFun =  (lpsetCalculateFun)GetProcAddress(hDll,"setCalculate");//擷取函數的匯出地址setClearAllFun =  (lpsetClearAllFun)GetProcAddress(hDll,"setClearAll");   //擷取函數的匯出地址if(setCalculateFun!=NULL){if(LOWORD(lParam)==LOWORD(calculateButton)){setCalculateFun(hwnd,hwnd1,hwnd2,hwnd3,hwnd4);}}if(setClearAllFun!=NULL){if(LOWORD(lParam)==LOWORD(clearButton)){setClearAllFun(hwnd1,hwnd2,hwnd3,hwnd4);}}FreeLibrary(hDll);}else{MessageBox(hwnd,TEXT("hDll建立不成功"),TEXT("提示"),MB_OK);}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, message, wParam, lParam);}return 0;}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.