🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.program
Article #1067

��VC++����ͨ�öԻ���

#1067
From: ���ܵ�Сʨ
Date: Thu, 07 May 1998 00:00
181 lines
12672 bytes
    �Ի������
    һ��ͨ�öԻ�������Windows��ƺͱ�д��,�������ijһ�ض���
��,�����һ���ļ���ѡ��һ����ɫ�ȡ�MFC�ṩ�˹���ÿһͨ�ö�
�������͵���,��Щ��������±��С���1
    ����:����File�˵���Open��Save As����ʱʹ��CFileDialogͨ
�öԻ���,����Prin��Print Setup����ʱ��ʹ��CPrintDialogͨ��
�Ի���
    ����Щ�Ի������û�Ӧ���Ǻܷ����,����ʱ��Щͨ�öԻ���
���ⲿ���Ժ���Ϊ���������û�Ҫ��,�ر����ڶԻ�������Ҫ����ij
Щ�ؼ���ɾ��ijЩ�ؼ�ʱ��Ϊͻ���������ṩ����һ�ַ���������
ͨ�öԻ�����ⲿ���Ժ���Ϊ,�����Լ��Ĵ�����MFC�ṩ����Эͬ��
����Щ�Ի���,�������û��IJ�ͬҪ��һ��������ʹ����MFC��ͨ��
�Ի�����,��ʡ�˴����Ĵ����̹���,����˿���Ч��;��һ����,��
���Լ��Ĵ���Эͬʵ��,ʹ�Ի���Ĺ��ܿ�����������������F
ile Open����Ϊ��,��������һ������
    ����File Openͨ�öԻ���
    CFileDialog���װWindows�����ļ��Ի��򡣹����ļ��Ի�����
һ����Windows��׼һ�µķ�ʽ,�ṩ��ʵ��File Open��File Save A
s�Ի���(�������ļ�ѡ��Ի���)�ļ򵥷�����
    CFileDialog����һ��Ա����m_ofn,����OPENFILENAME���͵Ľ�
����ͨ��,Ҫʹ��һ��F ileDialog����,��Ҫ������CFileDialog�Ĺ�
�캯��ö����ڶԻ��򱻹���֮��,������DoModal��Ա������
ʾ�Ի���֮ǰ,Ӧ�ó������ͨ������m_ofn�ṹ�е�ֵ,���Դ˶Ի�
���еĿؼ���ֵ��״̬���г�ʼ��������:Ӧ�ó���ɽ�m_ofn��lpsz
Title��Ա����Ϊ����Ҫ�ĶԻ������;�ɽ�m_ofn��ָ���öԻ����
������־Flags��Ա����Ϊ�����־λֵ�Ķ������,�Դﵽһ��Ҫ��
,����,���õ�Flags�е�OFN��ALLOWMULTISELECT��־�������û�ѡ��
����ļ�;����OFN_HIDEREADONLY��־������Read Only����;����O
FN_OVERWRITEPROMT��־����������ѡ����ļ��Ѵ���,��ʹSave As
�Ի������һ����Ϣ��,ʹ�û�ȷ���Ƿ���д���ļ�;�ȵȡ��йش˽�
������ϸ˵��,������ij�Ա�б�,�ο�Windows SDK�ĵ���OPENILE N
AME�Ľ��ܡ�
    ������������,���ı�m_ofn��ֵֻ�������򵥵Ķ���,��Ҫ��ͨ
�öԻ������ۡ�ͨ�öԻ������пؼ����н�һ������(���ܸı��
ɾ��),�Լ���ͨ�öԻ��������µĿ���,�����ϼ򵥶��Ʒ���������
���ġ����߽�Ϊ����ṩһ�ַ���,������һ���������ܡ�
    ����ٶ�һӦ�ó���Ҫ����ijһλͼ�ļ�,Ҫ���Ҫ�����λͼ
�ļ�����Ԥ��,����ʵ������File Openͨ�öԻ���Ļ�������Ԥ��
����,��ÿ��ѡ��һ��λͼ�ļ�ʱ,���ڶԻ�������ʾ���ļ���λͼ��
Ϊ��ʡ��̹�����,�ɶ�Windows�ṩ��File Openͨ�öԻ�����ж�
�ơ������ƶԻ����ȡ�ķ�����ֱ��ʹ��CFileDialog��,�跨��ȡ
��׼ͨ�öԻ�����Դ����������޸�,Ȼ���дFile Open�˵����
������һ�����Ӻ���(HOOK)����������Ҫ�󡣱�����VC++4.0����
�д���һ��DibPreView��Ŀ��ʵ�֡�
    1.��ȡ������ͨ�öԻ�����Դ
    ��ʹ��VC++�Զ�������Ӧ�ó�����,ϵͳ�˵�File���е�Open��
�Ĵ����ǵ�����ϵͳ��CommDll.DLL�ṩ�ı�׼File Open�Ի���,Ҫ
ʵ�ֶ��䶨�ƾͱ���ػ�Open�������,���Լ��Ĵ���������,�����
ϵͳ�ṩ��ȱʡ���?Ҫ������㲢������,ֻҪ��ClassWizard�ں�
�ʵĶ���(�����ĵ�����Ӵ����)�����Ӷ�ID_FILE-OPEN���ƵĴ���
,������OnFileOpen����,��д�˺������ʵ�ֶ�Open����Ĵ��?��
�˺���������Ҫ����һ��CFileDialog��Ķ���,�ö������ۺ���Ϊ
��ͬ��׼��File Open�Ի�����ͬ,Ҫ�ı�ö�������λ�ɾ��ԭ�Ի�
���е�ijЩ�ؼ�������ijЩ�ؼ�,�����������跨��ȡ�ö������Ӧ
�ı�׼��Դ,Ȼ��,���������Ӧ���޸ġ���ȡ��Դ�ķ���������:
    ����һ:
    ��Msdev/IncludeĿ¼�д������ϼ�����׼ͨ�öԻ������Դ,��
FileOpen.Dlg�� FotD lg��FindText.Dlg��Color.Dlg��PrnSetup.Dl
g�ļ���ʽ����,��Щ�ļ����е�һЩ�����������ڱ�Ŀ¼�е�dlgs.h
�С�Ϊ�˶��ƸöԻ���,��Ҫ����ʽ��ʽ������Щ��Դ,Ҫ������Ƕ��
����Ӧ�ó������Դ��,Ȼ�����޸ĸöԻ������Դ�����岽������:
    (1)��VC++4.0�Զ�������ĿDibPreView��ȫ���ļ�;
    (2)��Text��ʽ�򿪱���Ŀ�е���Դ�ļ�DibPreView.rc,�ڴ���
���е�Dialog������ǰ�������:
    #include <FileOpen.dlg>
    (3)��Afxres.h�ļ���Msdev/Mfc/IncludeĿ¼�и��Ƶ�����ĿĿ
¼��,�����¸��Ƶ�Afxres.h�ļ�,������������ӵ��ļ�����:
    #include <dlgs.h>
    ������:
    ��VC++��װ���е�Msdev\Sample\Mfc\General\ClipartĿ¼�д�
����Դ�ļ�Commdlg.c ,���ļ�����Color��File��Open(��Save As)
��Find��Font��Print��Print Setup��Replce ����ͨ�öԻ������
Դ,Ϊ������ʽ��ʽ������Щ��Դ,������VC++����Դ�༭��,������
��ͨ�öԻ�����Դ���Ƶ�������Ŀ��Դ�ļ��С�
    �������������������,�ڱ���Ŀ����ԴĿ¼�б��е�Dialog��
��,����һ��ʶ��ΪFIE OPENORD�ĶԻ�����Դ,Ȼ��������Դ�༭��
�Դ˱�׼File Open�Ի���(��FILEOPENORD��ʶ��)���и��졣��Ҫ��
��ԭ�Ի���������һ����Ի�Button,ΪԤ��λͼ֮��,����ID��ΪI_
 view,����ͼ:
    ��׼��File Open�Ի���:
ͼ1
    ���ƹ��File Open�Ի���:
ͼ2
    ע:�䶯����:
    (1)�߿�ӳ�;
    (2)ɾ��"read only"��;
    (3)�ƶ�"OK"��"Cancel"��"Help"��ť;
    (4)����һ���Ի���ťbutton1��

    2.��������
    VC++�Զ���ɵij�������ΪOpen�����ṩ��ȱʡ�Ĵ��?��,
Ϊ���ƸöԻ��������дOpen����Ĵ��?����ClassWizard����
���������һ���˵����?��OnOpenFile(),�����������:
    void CDibPreViewDoc::OnFileOpen()
    {
    //TODO:Add your command handler code here
    char FileNameString[]="*.dib";
    char FilterString[]="DIB file(*.dib)|*.dib|BMP file(*.bm
p)|*.bmp|All file(. *)|*.*||";
    CFileDialog FileDialog(TRUE,NULL,(LPSTR)FileNameString,O
FN--HIDEREAD|OFN-OE RWRITEPROMPT,(LPSTR)FilterString);
    FileDialog.m-ofn.Flags=OFN��SHOWHELP|OFN��ENABLEHOOK|OFN
��HIDEREADONLY|OFN��ENABLETEMPLATE;
    FileDialog.m-ofn.lpfnHook=(LPOFNHOOKPROC)MakeProcInstanc
e(FileOpenHookProcN ULL);
    FileDialog.m��ofn.lpTemplateName=(LPSTR)MAKEINTRESOURCE(
FILEOPENORD);
    if(FileDialog.DoModal()==IDOK)
    }
    ����
    }
    }
    ����,Ϊ�˶���CFileDialog����Ϊ,���Ƕ���һ�����Ӻ���FileO
penHookProc()���ػ񷢸�CFileDialog��ȫ����Ϣ,���������ɸѡ,
ѡȡ�Լ���Ҫ���д��?���Լ����������Ϣ���Լ����������Ҫ��
��MFC�������Ϣ,���Ӻ����FALSE;���Լ�����������ҪF C
�������Ϣ,���Ӻ����TRUE������ƪ������,���ṩ���������
��
    BOOL CALLBACK FileOpenHookProc(
    HWND hDlg,
    /*window handle of the dialog box*/
    UINT message,  /*type of message */
    WPARAM wParam, /*message_specific information */
    LPARAM lParam)
    {
    switch(message)
    {
    case WM��INITDIALOG:
    //��ʼ������
    ����
    break;
    case WM��COMMAND:
    //�ж��Ƿ�Ϊ�ļ��б����ѡ������ı�ʱ��������Ϣ
       if(LOWORD(wParam)==lstl &&HIWORD(wParam)==LBN��SELCHA
NGE)
    /* lstl���ļ��б���ID��*/
    {
    //��ȡ�б�����е�ѡ��������
    int nItem=SendDlgItemMessage(hDlg,lst1,LB��GETCURSEL,(WP
ARAM) 0,(LPARAM) 0
     //��ȡ�б�����е�ѡ������ַ�ij���
    int tmpLength=SendDlgItemMessage(hDlg,ist1,LB��GETTEXTLE
N,(WPARAM) nItem,(P ARAM) 0);
    //��ȡ�б�����е�ѡ������ַ�
      ::SendDlgItemMessage(hDlg,lst1,LB��GETTEXT,(WPARAM) nI
tem,(LPARAM) &Filea me);
    FileName[tmpLength]=0;
      //��ȡ���ӵ�Button�Ĵ��ھ��
      HWND staticItem=::GetDlgItem(hDlg,IDC��view);
      if(!staticItem)
      MessaageBox(hDlg,"Can not find HWND","Error",MB-OK);
      //Ҫ��ˢ�����ӵ�Button�Ĵ���
      ::InvalidateRect(staticItem,NULL,TRUE);
      ::UpdateWindow(staticItem);
      }
      break;
      case WM��DRAWITEM:
     LPDRAWITEMSTRUC lpdis=(LPDRAWI TEMSTRUCT) lParam;
     HDC hdcMem=lpdis��>hDC;
      //�ж��Ƿ�ΪҪ��ˢ��buttonl���ڶ������Ϣ
      if(wParam==IDC_view)
      //IDC_view�������ӵ�buttonl��ID��
      {
      //ˢ�����ӵ�Buttonl����(��buttonl����ʾλͼ)
      ����
      }
    break;
    }
    return(FALSE);
    }

--
 ________ _____          _____        ______________  _____ 
 ___  __ \___(_)________ ___(_)       __  ___/___  /_ ___(_)
 __  /_/ /__  / ___  __ \__  /        _____ \ __  __ \__  / 
 _  ____/ _  /  __  /_/ /_  /         ____/ / _  / / /_  /  
 /_/      /_/   _  .___/ /_/          /____/  /_/ /_/ /_/   
                /_/                                         

�� ��Դ:���ϴ�С�ٺ���Ϣ����վ bbs.nju.edu.cn��[FROM: hsia.nju.edu.cn]
Technical Details
Message-ID: <3OOYHR$tv8@bbs.nju.edu.cn>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB
X-Google-Thread: fc86e,fb07cf9bfb9ef379,start
X-Google-Attributes: gidfc86e,public
From: pipishi.bbs@bbs.nju.edu.cn (���ܵ�Сʨ)
Subject: ��VC++����ͨ�öԻ���
Date: 1998/05/07
Message-ID: <3OOYHR$tv8@bbs.nju.edu.cn>
X-Deja-AN: 351554910
X-Filename: Programming/M.894547275.A
Organization: nju_bbs
Newsgroups: cn.bbs.comp.program