Windows E下文注 ofn.hwndOwner=hWnd; ofn.lpstrFilter=L“位图文件(*.bmp)\0*.bmp\0所有文件(*.*)\0*.\0”; ofn.lpstrFile=szFileName; ofn.nMaxFile=最大路径; ofn.Flags=ofn|U EXPLORER | ofn|U文件必须存在| ofn|U隐藏; ofn.lpstrDefExt=L“bmp”; if(GetOpenFileName(&ofn)) { MessageBox(NULL,szFileName,L“path”,MB_OK); //无效(hWnd,0,真); } } 打破 违约: 返回DefWindowProc(hWnd、message、wParam、lParam); } 打破 案例WM_油漆: hdc=开始喷漆(hWnd和ps); //TODO:在此处添加任何图形代码。。。 LoadAndBlitBitmap(L“D:/Splash.bmp”,hdc); 端漆(hWnd和ps); 打破 案例WM_销毁: PostQuitMessage(0); 打破 违约: 返回DefWindowProc(hWnd、message、wParam、lParam); } 返回0; } //关于框的消息处理程序。 INT_PTR回调关于(HWND hDlg、UINT消息、WPARAM WPARAM、LPARAM LPARAM) { 未引用的_参数(lpram); 开关(信息) { 案例WM_初始化对话框: 返回(INT_PTR)TRUE; case WM_命令: if(LOWORD(wParam)==IDOK | | LOWORD(wParam)==IDCANCEL) { EndDialog(hDlg、LOWORD(wParam)); 返回(INT_PTR)TRUE; } 打破 } 返回(INT_PTR)FALSE; }

Windows E下文注 ofn.hwndOwner=hWnd; ofn.lpstrFilter=L“位图文件(*.bmp)\0*.bmp\0所有文件(*.*)\0*.\0”; ofn.lpstrFile=szFileName; ofn.nMaxFile=最大路径; ofn.Flags=ofn|U EXPLORER | ofn|U文件必须存在| ofn|U隐藏; ofn.lpstrDefExt=L“bmp”; if(GetOpenFileName(&ofn)) { MessageBox(NULL,szFileName,L“path”,MB_OK); //无效(hWnd,0,真); } } 打破 违约: 返回DefWindowProc(hWnd、message、wParam、lParam); } 打破 案例WM_油漆: hdc=开始喷漆(hWnd和ps); //TODO:在此处添加任何图形代码。。。 LoadAndBlitBitmap(L“D:/Splash.bmp”,hdc); 端漆(hWnd和ps); 打破 案例WM_销毁: PostQuitMessage(0); 打破 违约: 返回DefWindowProc(hWnd、message、wParam、lParam); } 返回0; } //关于框的消息处理程序。 INT_PTR回调关于(HWND hDlg、UINT消息、WPARAM WPARAM、LPARAM LPARAM) { 未引用的_参数(lpram); 开关(信息) { 案例WM_初始化对话框: 返回(INT_PTR)TRUE; case WM_命令: if(LOWORD(wParam)==IDOK | | LOWORD(wParam)==IDCANCEL) { EndDialog(hDlg、LOWORD(wParam)); 返回(INT_PTR)TRUE; } 打破 } 返回(INT_PTR)FALSE; },windows,winapi,win32gui,loadimage,Windows,Winapi,Win32gui,Loadimage,反斜杠不是问题所在。事实上,windows更喜欢反斜杠而不是正斜杠。您的问题是,您已经将szFileName缓冲区设置为本地到窗口过程函数(WndProc)。当您单击菜单项选择一个文件时,消息WM_COMMAND将发送到窗口,并由该窗口过程处理。您已经正确地实现了打开对话框和检索文件路径。但是,当此处理完成时,函数WndProc退出并销毁堆栈中的所有局部变量,包括szFileName中包含的文件路径 要解决您的问题,请将szFileName设置为全局变量,这样它就不会被破坏。还请注意,在选择图像

反斜杠不是问题所在。事实上,windows更喜欢反斜杠而不是正斜杠。您的问题是,您已经将
szFileName
缓冲区设置为本地到窗口过程函数(
WndProc
)。当您单击菜单项选择一个文件时,消息
WM_COMMAND
将发送到窗口,并由该窗口过程处理。您已经正确地实现了打开对话框和检索文件路径。但是,当此处理完成时,函数
WndProc
退出并销毁堆栈中的所有局部变量,包括
szFileName
中包含的文件路径

要解决您的问题,请将
szFileName
设置为全局变量,这样它就不会被破坏。还请注意,在选择图像文件后,窗口不会自动更新自身,您需要在调用
GetOpenFileName
后,通过添加此代码来指示窗口重新绘制自身:

InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);

这将使整个窗口区域无效,并计划重新绘制窗口(这意味着消息
WM_PAINT
将再次发送到窗口并由
WndProc
处理)。

反斜杠不是问题。事实上,windows更喜欢反斜杠而不是正斜杠。您的问题是,您已经将
szFileName
缓冲区设置为本地到窗口过程函数(
WndProc
)。当您单击菜单项选择一个文件时,消息
WM_COMMAND
将发送到窗口,并由该窗口过程处理。您已经正确地实现了打开对话框和检索文件路径。但是,当此处理完成时,函数
WndProc
退出并销毁堆栈中的所有局部变量,包括
szFileName
中包含的文件路径

要解决您的问题,请将
szFileName
设置为全局变量,这样它就不会被破坏。还请注意,在选择图像文件后,窗口不会自动更新自身,您需要在调用
GetOpenFileName
后,通过添加此代码来指示窗口重新绘制自身:

InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);

这将使整个窗口区域无效,并计划重新绘制窗口(这意味着消息
WM_PAINT
将再次发送到窗口并由
WndProc
处理)。

您可能需要删除字符串分隔符引号(双引号)
\“'
@Priyank是否没有反馈?我的回答帮助你解决问题了吗?如果是这样,请考虑把它标记为“接受”。谢谢你,MarkoPopovic,这解决了这个问题。对不起,最近的回复:“您可能需要删除字符串分隔符引号(双引号)<代码>”\“代码/ @ PRYYANK没有反馈”吗?我的答案有助于您解决您的问题吗?如果是,请考虑将其标记为接受。谢谢您,MarkoPopovic,这解决了问题。对不起,已故的答复: