这个可滚动对话框的示例 https://www.codeproject.com/articles/32925/scrollable-dialog-in-pure-win32-api
工作正常,并显示对话框 我的问题是这个对话框=桌面窗口 或者桌面窗口丢失了? 任何将代码放入 vs2022 C++ 桌面的尝试 用于显示桌面窗口的应用程序 和顶部的对话框...失败 这是 WinMain 和 DialogBox 宏
int WINAPI _tWinMain(
HINSTANCE hInstance,
//HINSTANCE /*hPrevInstance*/,
HINSTANCE hPrevInstance,
LPWSTR /*lpCmdLine*/,
int /*nShowCmd*/) // THIS DIFFERENT NCMDSHOW USED IN MAINWIN
{
DialogBox(
hInstance,
MAKEINTRESOURCE(IDD_DIALOG1),
GetDesktopWindow(),
SD_DialogProc);
return 0;
}
INT_PTR CALLBACK SD_DialogProc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hwndDlg, WM_INITDIALOG, SD_OnInitDialog);
HANDLE_MSG(hwndDlg, WM_COMMAND, SD_OnCommand);
HANDLE_MSG(hwndDlg, WM_SIZE, SD_OnSize);
HANDLE_MSG(hwndDlg, WM_HSCROLL, SD_OnHScroll);
HANDLE_MSG(hwndDlg, WM_VSCROLL, SD_OnVScroll);
}
return FALSE;
}
对话框
IDD_DIALOG1 DIALOGEX 0, 0, 316, 185
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_VSCROLL | WS_HSCROLL | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
EDITTEXT IDC_EDIT1,7,6,291,14,ES_AUTOHSCROLL
PUSHBUTTON "Button1",IDC_BUTTON1,6,30,50,14
CONTROL "Check1",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,54,39,10
GROUPBOX "Static",IDC_STATIC,7,70,110,50
CONTROL "Radio1",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,12,84,38,10
CONTROL "Radio2",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,12,102,38,10
LTEXT "Sample Static Control",IDC_STATIC,6,126,108,8
DEFPUSHBUTTON "OK",IDOK,194,154,50,14
PUSHBUTTON "Cancel",IDCANCEL,248,154,50,14
END
已合并滚动对话框所需的信息 .RC .H 使用 CreateWindow() 到项目应用程序。
注意:此代码没有 WinProc(){ }
显然,这个WinMain是一个有效的入口点,但没有CreateWindow 实例和注册?我们不应该期望看到 桌面窗口?
因此这个WinMain只允许DialogBox的初始化,但是 没有任何对桌面CreateWindow的引用
尝试将代码包含/合并到 vs2022 C++/desktop 中, 桌面窗口出现,但对话框未能出现, 经过多次尝试如何包含对话框宏后, 在WinMain或实例或注册...等...
一个有趣的问题: 此代码的解决方案资源管理器出现在代码编辑器旁边 在应用程序文件中,单击打开项目时的 .sln vs2022。 当 .rc 或任何其他模块从文件目录中单击时 它不会在应用的文本编辑器中打开 ""致命错误 RC1015: 无法打开包含文件'afxres.h'"" MFC加载到vs2022.... 然而; 只会在另一个同时打开的项目X中打开 施罗尔项目。
对话框现在是否被视为桌面菜单? 可以用桌面窗口来显示应用程序吗 元素和这个对话框的好例子?
文档显示了位于下面的模式对话框代码 WM-DELETEITEM(学习:deleteItme 示例)
case IDM_DELETEITEM:
if (DialogBox(hinst,
MAKEINTRESOURCE(DLG_DELETEITEM),
hwnd,
(DLGPROC)DeleteItemProc)==IDOK)
{
// Complete the command; szItemName contains the
// name of the item to delete.
}
此代码从 -tWinMain() { DialogBox( ); 启动宏}
在项目应用程序中找到对话框宏的位置 因为我无法在 WM_INITDIALOG 下调用它 将 SD_DialogProc() 放置在 WinProc() 中的 WM_INITDIALOG 下
尝试使用的 WinProc() 部分? 我们如何让 WinMain 调用 WM_INITDIALOG ???
case WM_INITDIALOG:
// add
// Get the owner window and dialog box rectangles.
//You create a modal dialog box by using the DialogBox function.
// You must specify the identifier or name of a dialog box template resource
// and a pointer to the dialog box procedure.
// The DialogBox function loads the template,
// displays the dialog box, and processes all user input
// the application specifies its main window as the owner window for the dialog box.
if ((hwndOwner = GetParent(hwndDlg)) == NULL)
{
hwndOwner = GetDesktopWindow();
}
GetWindowRect(hwndOwner, &rcOwner);
GetWindowRect(hwndDlg, &rcDlg);
CopyRect(&rc, &rcOwner);
DialogBox(
hInstance,
MAKEINTRESOURCE(IDD_DIALOG1),
GetDesktopWindow(), // RETURN HANDLE TO MAIN WINDOW JUST LIKE hwnd,
SD_DialogProc);
// SD_DialogProc;
// Offset the owner and dialog box rectangles so that right and bottom
// values represent the width and height, and then offset the owner again
// to discard space taken up by the dialog box.
OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top);
OffsetRect(&rc, -rc.left, -rc.top);
OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom);
// The new position is the sum of half the remaining space and the owner's
// original position.
SetWindowPos(hwndDlg,
HWND_TOP,
rcOwner.left + (rc.right / 2),
rcOwner.top + (rc.bottom / 2),
0, 0, // Ignores size arguments.
SWP_NOSIZE);
if (GetDlgCtrlID((HWND)wParam) != ID_ITEMNAME)
{
SetFocus(GetDlgItem(hwndDlg, ID_ITEMNAME));
return FALSE;
}
return TRUE;
break;
就这些了,抱歉写了太多!
上述所有操作均已完成,但没有任何效果来获取桌面窗口 以及 DialogBox() nacro
的代码合并的资源定义文件 (.rc) 中可能存在一些问题。 以下代码对我有用。
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
//IDD_ABOUTBOX DIALOGEX 0, 0, 102, 43
//your definition
IDD_DIALOG1 DIALOGEX 0, 0, 316, 185
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_VSCROLL | WS_HSCROLL | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
EDITTEXT IDC_EDIT1,7,6,291,14,ES_AUTOHSCROLL
PUSHBUTTON "Button1",IDC_BUTTON1,6,30,50,14
CONTROL "Check1",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,54,39,10
GROUPBOX "Static",IDC_STATIC1,7,70,110,50
CONTROL "Radio1",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,12,84,38,10
CONTROL "Radio2",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,12,102,38,10
LTEXT "Sample Static Control",IDC_STATIC,6,126,108,8
DEFPUSHBUTTON "OK",IDOK,194,154,50,14
PUSHBUTTON "Cancel",IDCANCEL,248,154,50,14
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
TOPMARGIN, 7
END
IDD_DIALOG1, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 298
TOPMARGIN, 7
BOTTOMMARGIN, 168
END
END
#endif // APSTUDIO_INVOKED
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,SD_DialogProc);