hur.cn - 华软网

 热门搜索

api函数调用打开文件对话框

  作者:未知    来源:网络    更新时间:2011/10/1
C++">
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
char cBuf[250] ;
OPENFILENAME ofn ;

ZeroMemory (&ofn, sizeof(OPENFILENAME)) ; //Q1
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hwnd ;
ofn.lpstrFilter = "*.TXT;*.DOC;*.BAK" ;
ofn.nFilterIndex = 1 ;
ofn.lpstrFile = cBuf ;
ofn.nMaxFile = sizeof (cBuf) ;
ofn.lpstrFileTitle = NULL ;
ofn.nMaxFileTitle = 0 ;
ofn.lpstrInitialDir = NULL ;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST ;

switch (message)
{
case WM_CREATE :
return 0 ;
case WM_COMMAND :
switch (wParam)
{
case IDC_OPEN :
GetOpenFileName (&ofn) ;  //Q2
break ;
}
return 0 ;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}


Q1:不加这条语句编译不成功
Q2:编译成功后点击open按钮,不能弹出“打开文件”对话框
---华软 网友回答---
 调用CommDlgExtendedError()看返回值多少
---华软网友回复---
ZeroMemory( &ofn, sizeof( ofn ) );
ofn.lStructSize = sizeof( OPENFILENAME );
///设定打开文件的类型
ofn.lpstrFilter = ...;
ofn.nMaxFile = MAX_PATH;
ofn.hwndOwner = ...;

---华软网友回复---
C++">OPENFILENAME ofn;       // common dialog box structure
char szFile[260];       // buffer for file name
HWND hwnd;              // owner window
HANDLE hf;              // file handle

// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
//
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
// use the contents of szFile to initialize itself.
//
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Display the Open dialog box. 

if (GetOpenFileName(&ofn)==TRUE) 
    hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
        0, (LPSECURITY_ATTRIBUTES) NULL,
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
        (HANDLE) NULL);

---华软网友回复---
Q1:不加这条语句编译不成功
   报什么错误?(应该加上ZeroMemory)
Q2:编译成功后点击open按钮,不能弹出“打开文件”对话框
 原因是 cBuf 数组第一个成员的值应为 0,可以这么做
   char cBuf[250] = {0,} ;
 具体原因:
      Pointer to a buffer that contains a filename used to initialize the File Name edit control. 
The first character of this buffer must be NULL if initialization is not necessary
   或者cBuf里面包含文件名,或者第一个成员变量值是NULL(0).
 
---华软网友回复---
支持4楼
---华软网友回复---
  class="deleted_message"> 该回复于2011-12-07 09:35:50被版主删除        
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。