请教对话框的问题

独孤不羁 2010-07-15 08:21:25
写了一个控制面板程序,其中点击图标即弹出对话框,现在的问题是弹出的对话框只在屏幕上一部分,不像建立一个MFC对话框应用程序那样占满整个屏幕。部分代码如下。

#include "StdAfx.h"
#include "winuser.h"
#include "windef.h"
#include "ControlPanalInterface.h"

int APIENTRY CPlApplet(HWND hWndCPL, UINT uMsg, LPARAM wParam, LPARAM lParam)
{
int i;
LPNEWCPLINFO lpNewCPlInfo;

i = (int) wParam;

switch(uMsg)
{
case CPL_INIT: // 此消息为第一个消息用于初始化
return TRUE;

case CPL_GETCOUNT: // 此消息用来取得此控制面板程序所包含的对话框个数,只被发送一次,反回值为对话框个数
return 1;
break;

case CPL_NEWINQUIRE:
lpNewCPlInfo = (LPNEWCPLINFO)lParam;
lpNewCPlInfo->dwSize = (DWORD)sizeof(NEWCPLINFO);
lpNewCPlInfo->dwFlags = 0;
lpNewCPlInfo->dwHelpContext = 0;
lpNewCPlInfo->lData =IDI_G_ICON;
lpNewCPlInfo->hIcon = LoadIcon(g_hInstance,(LPCTSTR)MAKEINTRESOURCE(IDI_G_ICON));
lpNewCPlInfo->szHelpFile[0] = '\0';
LoadString(g_hInstance,IDS_CONTOLPANAL_NAME,lpNewCPlInfo->szName,32);
LoadString(g_hInstance,IDS_CONTOLPANAL_NAME,lpNewCPlInfo->szInfo,64);
return 0;
break;

case CPL_INQUIRE:
break;

case CPL_DBLCLK: // 当用户点击此控制面板图标是,产生此消息
DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_WAKEUP_SET_DLG),hWndCPL,(DLGPROC)CPLDlg);
break;

case CPL_STOP: // 每个应用发生一次,在CPL_EXIT前调用
break;

case CPL_EXIT: // 只发一次在FreeLibrary前调用
break;

default:
break;

}
return 0;
}

BOOL FAR PASCAL CPLDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
DWORD dwType;
BYTE DataBuf[100];
DWORD dwReserved;
DWORD dwSize;

RECT rt;

HKEY hKey=HKEY_CURRENT_USER;

//[HKEY_LOCAL_MACHINE\System\state\Keypad]键下 "KeyWakeUp"=dword:00000001为是否允许任意键唤醒
TCHAR ValueName[]=L"System\\state\\Keypad\\KeyWakeUp";

switch(message)
{
case WM_INITDIALOG:
dwSize = 4;
SHINITDLGINFO ShiDlgInfo;

ShiDlgInfo.dwMask = SHIDIM_FLAGS;
ShiDlgInfo.dwFlags = SHIDIF_DONEBUTTON |SHIDIF_SIZEDLG| SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN|SHIDIF_CANCELBUTTON;
ShiDlgInfo.hDlg = hDlg;
SHInitDialog(&ShiDlgInfo);

if(RegQueryValueEx(HKEY_CURRENT_USER,ValueName,&dwReserved,&dwType,DataBuf,&dwSize)== ERROR_SUCCESS)
{
if( DataBuf[0] == 0x95 )
SendDlgItemMessage(hDlg,IDC_ALLOW_ANY_KEY_WAKEUP,BM_SETCHECK,1,0L);
else
SendDlgItemMessage(hDlg,IDC_ALLOW_ANY_KEY_WAKEUP,BM_SETCHECK,0,0L);
}

::GetClientRect(::GetDesktopWindow(),&rt);
::MoveWindow(hDlg,0,0,rt.right-rt.left,rt.bottom-rt.top,FALSE);
return TRUE;
case WM_COMMAND:
switch(wParam)
{
case IDOK:
if(SendDlgItemMessage(hDlg,IDC_ALLOW_ANY_KEY_WAKEUP,BM_GETCHECK,0,0L) == BST_CHECKED)
DataBuf[0] = 0x95;
else
DataBuf[0] = 0xb5;
DataBuf[1] =DataBuf[2] = DataBuf[3] = 0;
dwSize =4;
dwReserved = 0;
dwType = REG_BINARY;
RegSetValueEx(HKEY_CURRENT_USER,ValueName,dwReserved,dwType,(BYTE*)DataBuf,dwSize);
EndDialog(hDlg,TRUE);
break;
case IDCANCEL:
EndDialog(hDlg,FALSE);
break;
}
break;
case WM_DESTROY:
break;
}
return FALSE;
}
...全文
57 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
独孤不羁 2010-08-13
  • 打赏
  • 举报
回复
不是的,用你说的两个API不行。
yuhuaijun 2010-07-19
  • 打赏
  • 举报
回复
可以在OnInitDialog中用MoveWindow/SetWindowPos改变对话框位置大小,
不知道LZ是不是这个意思,

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧