在提取资源中对话框的时候发现有些资源文件不能正常显示出来,使用 Resource Hacker 这样的工具却可以显示出来,可能是因为某些类未注册的原因吧,还请高手赐教,如何才能正确提取 Shell32.dll 中资源编号为 1007 的对话框资源!注:以下代码可以正常提取 1003, 1004 等对话框,分别为 Run 和 Missing Shortcut 对话框,而 1007 则为 Run As 对话框,望高手指点,非常感谢!LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
HMODULE hModule;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case IDM_DLG1003:
hModule=LoadLibrary("shell32.dll");
if (hModule != NULL)
{
DialogBox(hModule, (LPCTSTR)1003, hWnd, (DLGPROC)MyDlgProc);
FreeLibrary(hModule);
}
break;
case IDM_DLG1004:
hModule=LoadLibrary("shell32.dll");
if (hModule != NULL)
{
DialogBox(hModule, (LPCTSTR)1004, hWnd, (DLGPROC)MyDlgProc);
FreeLibrary(hModule);
}
break;
case IDM_DLG1007:
hModule=LoadLibrary("shell32.dll");
if (hModule != NULL)
{
DialogBox(hModule, (LPCTSTR)1007, hWnd, (DLGPROC)MyDlgProc);
FreeLibrary(hModule);
}
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}LRESULT CALLBACK MyDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
return FALSE;
}
{
int wmId, wmEvent;
HMODULE hModule;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case IDM_DLG1003:
hModule=LoadLibrary("shell32.dll");
if (hModule != NULL)
{
DialogBox(hModule, (LPCTSTR)1003, hWnd, (DLGPROC)MyDlgProc);
FreeLibrary(hModule);
}
break;
case IDM_DLG1004:
hModule=LoadLibrary("shell32.dll");
if (hModule != NULL)
{
DialogBox(hModule, (LPCTSTR)1004, hWnd, (DLGPROC)MyDlgProc);
FreeLibrary(hModule);
}
break;
case IDM_DLG1007:
hModule=LoadLibrary("shell32.dll");
if (hModule != NULL)
{
DialogBox(hModule, (LPCTSTR)1007, hWnd, (DLGPROC)MyDlgProc);
FreeLibrary(hModule);
}
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}LRESULT CALLBACK MyDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
return FALSE;
}
#pragma comment ( lib, "comctl32.lib" ) int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
InitCommonControls();
INITCOMMONCONTROLSEX icex;
icex.dwICC = ICC_LISTVIEW_CLASSES | ICC_TREEVIEW_CLASSES | ICC_BAR_CLASSES |
ICC_TAB_CLASSES | ICC_UPDOWN_CLASS | ICC_PROGRESS_CLASS | ICC_HOTKEY_CLASS |
ICC_ANIMATE_CLASS | ICC_DATE_CLASSES | ICC_USEREX_CLASSES | ICC_COOL_CLASSES |
ICC_INTERNET_CLASSES | ICC_PAGESCROLLER_CLASS | ICC_NATIVEFNTCTL_CLASS;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX); if (InitCommonControlsEx(&icex) == false)
MessageBox(NULL, "Error!", "Tip", MB_ICONINFORMATION | MB_OK); MSG msg;
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
http://down.itchinese.com/other/learn/vc6/DlgTest.rar