回 帖 发 新 帖 刷新版面

主题:窗口客户区控件消息传递的问题

我用一个函数在Windows32程序的主窗口建立一些控件,想通过点击控件实现一些功能,这些功能的实现也打算放在函数里,用的是switch语句,但主窗口客户区内的控件点击后无法进入函数的switch结构内去,也就是说点击控件(比如按钮)这个消息并没有传递到函数的switch中,不知道是为什么?
按照一些书说的,控件的句柄标识是在wParam参数的低字段,但总是不对,希望哪位高手能给一些提示和指点,不甚感谢!
我的函数是这样的:
void TextPreProc(HINSTANCE hInst, HWND hWnd, WPARAM wParam, UINT message)
{
    hdc = GetDC(hWnd);                  // 获得设备环境描述表
    GetClientRect(hWnd, &ClientRect);            // 获得客户区大小
//    hInst = ((LPCREATESTRUCT)lParam)->hInstance;    // 获得程序实例句柄


    // 在窗口客户区绘制好各种控件
    hOrignalTextWnd = CreateWindow(TEXT("EDIT"), NULL,
        WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_LEFT|ES_MULTILINE|ES_AUTOVSCROLL|ES_WANTRETURN,
        20, 20, ClientRect.right/3, ClientRect.bottom*2/5,
        hWnd, (HMENU)IDC_ORIGNALTEXT,
        (HINSTANCE)hInst, NULL);       // 绘制编辑框控件,用于显示原始文本

    // 在窗口客户区绘制用于显示置乱后文本的编辑框
    hEncryptedTextWnd = CreateWindow(TEXT("EDIT"), NULL,
        WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_LEFT|ES_MULTILINE|ES_AUTOVSCROLL|ES_WANTRETURN,
        300, 20, ClientRect.right/3, ClientRect.bottom*2/5,
        hWnd, (HMENU)IDC_ENCRYPTEDTEXT,
        (HINSTANCE)hInst, NULL); 

    // 建立用于显示编码后文本的编辑框
    hEncodedTextWnd = CreateWindow(TEXT("EDIT"), NULL,
        WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_LEFT|ES_MULTILINE|ES_AUTOVSCROLL|ES_WANTRETURN,
        20, 260, ClientRect.right/3, ClientRect.bottom*2/5,
        hWnd, (HMENU)IDC_ENCODEDTEXT,
        (HINSTANCE)hInst, NULL); 

    // 建立用于显示置乱后的文本编辑框
    hDisturbedTextWnd = CreateWindow(TEXT("EDIT"), NULL,
        WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_LEFT|ES_MULTILINE|ES_AUTOVSCROLL|ES_WANTRETURN,
        300, 260, ClientRect.right/3, ClientRect.bottom*2/5,
        hWnd, (HMENU)IDC_DISTURBEDTEXT,
        hInst, NULL); 

    // 建立静态文本标签
    CreateWindow(TEXT("STATIC"), TEXT("OrignalText"),
        WS_CHILD|WS_VISIBLE|SS_CENTER,
        100, 220, 100, 20,
        hWnd, (HMENU)NULL,
        hInst, NULL);

    CreateWindow(TEXT("STATIC"), TEXT("EncryptedText"),
        WS_CHILD|WS_VISIBLE|SS_CENTER,
        350, 220, 100, 20,
        hWnd, (HMENU)NULL,
        hInst, NULL);

    CreateWindow(TEXT("STATIC"), TEXT("EncodedText"),
        WS_CHILD|WS_VISIBLE|SS_CENTER,
        100, 460, 100, 20,
        hWnd, (HMENU)NULL,
        hInst, NULL);

    CreateWindow(TEXT("STATIC"), TEXT("DisturbedText"),
        WS_CHILD|WS_VISIBLE|SS_CENTER,
        350, 460, 100, 20,
        hWnd, (HMENU)NULL,
        hInst, NULL);

    // 建立密码输入编辑框
    CreateWindow(TEXT("BUTTON"), TEXT("Cipher"), BS_GROUPBOX | WS_CHILD | WS_VISIBLE,
        580, 20, 150, 130, hWnd, NULL, hInst, NULL);

    CreateWindow(TEXT("STATIC"), TEXT("Key1"),
        WS_CHILD|WS_VISIBLE|SS_CENTER,
        590, 40, 50, 25,
        hWnd, (HMENU)NULL,
        hInst, NULL);

    hKey1Wnd = CreateWindow(TEXT("EDIT"), NULL,
        WS_CHILD|WS_VISIBLE|ES_LEFT|ES_WANTRETURN,
        650, 40, 70, 25,
        hWnd, (HMENU)IDC_KEY1,
        hInst, NULL); 

    CreateWindow(TEXT("STATIC"), TEXT("Key2"),
        WS_CHILD|WS_VISIBLE|SS_CENTER,
        590, 80, 50, 25,
        hWnd, (HMENU)NULL,
        hInst, NULL);

    hKey2Wnd = CreateWindow(TEXT("EDIT"), NULL,
        WS_CHILD|WS_VISIBLE|ES_LEFT|ES_WANTRETURN,
        650, 80, 70, 25,
        hWnd, (HMENU)IDC_KEY2,
        hInst, NULL); 

    CreateWindow(TEXT("STATIC"), TEXT("Key3"),
        WS_CHILD|WS_VISIBLE|SS_CENTER,
        590, 120, 50, 25,
        hWnd, (HMENU)NULL,
        hInst, NULL);

    hKey3Wnd = CreateWindow(TEXT("EDIT"), NULL,
        WS_CHILD|WS_VISIBLE|ES_LEFT|ES_WANTRETURN,
        650, 120, 70, 25,
        hWnd, (HMENU)IDC_KEY3,
        hInst, NULL); 


    // 建立命令按钮
    hLoadingText = CreateWindow(TEXT("BUTTON"), TEXT("LoadingText"),
        WS_CHILD|WS_VISIBLE,
        610, 170, 90, 30,
        hWnd, (HMENU)IDB_LOADINGTEXT,
        hInst, NULL);

    hEncryptText = CreateWindow(TEXT("BUTTON"), TEXT("EncryptText"),
        WS_CHILD|WS_VISIBLE,
        610,220, 90, 30,
        hWnd, (HMENU)IDB_ENCRYPTTEXT,
        hInst, NULL);

    hEncodeText = CreateWindow(TEXT("BUTTON"), TEXT("EncodeText"),
        WS_CHILD|WS_VISIBLE,
        610, 270, 90, 30,
        hWnd, (HMENU)IDB_ENCODETEXT,
        hInst, NULL);

    hDisturbText = CreateWindow(TEXT("BUTTON"), TEXT("DisturbText"),
        WS_CHILD|WS_VISIBLE,
        610, 320, 90, 30,
        hWnd, (HMENU)IDB_DISTURBTEXT,
        hInst, NULL);

    hSaveText = CreateWindow(TEXT("BUTTON"), TEXT("SaveText"),
        WS_CHILD|WS_VISIBLE,
        610, 370, 90, 30,
        hWnd, (HMENU)IDB_SAVETEXT,
        hInst, NULL);

    hClose = CreateWindow(TEXT("BUTTON"), TEXT("CloseText"),
        WS_CHILD|WS_VISIBLE,
        610, 420, 90, 30,
        hWnd, (HMENU)IDB_CLOSE,
        hInst, NULL);

    // 编程实现对各控件的操作
    OPENFILENAME ofn;          // 定义一个打开、另存为对话框的结构
    static TCHAR    szFile[MAX_PATH];    //存储路径、文件名的缓冲区
    static TCHAR   szFilter[] = TEXT ("文本文件 (*.TXT)\0*.cdf\0")
                                TEXT ("All Files (*.*)\0*.*\0\0") ; 

    switch(message)
    {
    case IDB_LOADINGTEXT:
            ZeroMemory(&ofn, sizeof(OPENFILENAME));             
            ofn.lStructSize    = sizeof(OPENFILENAME);
            ofn.hwndOwner        = hWnd;
            ofn.lpstrFilter    = szFilter ;
            ofn.nFilterIndex    = 1;
            ofn.lpstrFile        = szFile;
            ofn.nMaxFile        = MAX_PATH ;            
            ofn.Flags =  OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

            // 创建对话框,若对话框结束后返回TRUE,则将ofn的lpstrFile域中返回
            // 文件名复制到缓冲区szFile

             if (GetOpenFileName(&ofn) == TRUE) 
             {
                 lstrcpy(szFile, ofn.lpstrFile );
                 MessageBox(hWnd, szFile, _T("打开完毕"), MB_OK | MB_ICONINFORMATION) ;
             }
            break;

        case IDB_ENCRYPTTEXT:
            break;
        case IDB_ENCODETEXT:
            break;
        case IDB_DISTURBTEXT:
            break;
        case IDB_SAVETEXT:
            break;
        case IDB_CLOSE:
            SendMessage(hWnd, WM_CLOSE, 0, 0);
            break;
    }    
    
}

回复列表 (共2个回复)

沙发

有谁做过这方面的程序,请帮帮忙噻

板凳


照如下代码:


#define ID_BUTTON 1001

LRESULT CALLBACK WndProc(HWND hwnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
static HWND h_button;
HINSTANCE hInst;
  switch(Msg)
{
    case WM_CREATE:
       hInst=GetModuleHandle(NULL);
  
       h_button=CreateWindow("BUTTON","OK",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                             20,20,100,100,hwnd,(HMENU)ID_BUTTON,hInst,NULL);
  
      ShowWindow(h_button,SW_SHOWNORMAL);
      break;
    case WM_COMMAND:
       if(LOWORD(wParam)==ID_BUTTON)
      MessageBox(hwnd,"这个件按了","fwoowf",0);
       break;
  ...........

}

我来回复

您尚未登录,请登录后再回复。点此登录或注册