//第一个问题:
void CImpulseDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_stic-=1; //m_stic是我在头文件类定义的int类型变量
CString num;
num.Format("%16d",m_stic);
num.TrimLeft();
CWnd *pWnd=this->GetDlgItem(IDC_STATIC_MY); //IDC_STATIC_MY是文本框控件ID
pWnd->SetWindowText(num);
if(m_stic==0)
{
PostMessage(WM_CLOSEWINDOWS_MESSAGE);
}
CDialog::OnTimer(nIDEvent);
}
为什么我在把文本框控件调小一点就显示不出来数字了呢?调得很大的时候没什么问题!//第二个问题
怎么样在一个类中给另外一个类发送消息!请详细说明,用不用加另一个类的头文件等等!
//第三个问题
我在程序中调用ExWindowsEx(EWX_REBOOT,0)和ExWindowsEx(EWX_FORCE,0)电脑都会注销,而不是重新启动或者关闭计算机,而ExWindowsEx(EWX_SHUNDOWN,0)却没什么反应,但我用关闭计算机却可以正常工作,请问这是怎么会事啊?
void CImpulseDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_stic-=1; //m_stic是我在头文件类定义的int类型变量
CString num;
num.Format("%16d",m_stic);
num.TrimLeft();
CWnd *pWnd=this->GetDlgItem(IDC_STATIC_MY); //IDC_STATIC_MY是文本框控件ID
pWnd->SetWindowText(num);
if(m_stic==0)
{
PostMessage(WM_CLOSEWINDOWS_MESSAGE);
}
CDialog::OnTimer(nIDEvent);
}
为什么我在把文本框控件调小一点就显示不出来数字了呢?调得很大的时候没什么问题!//第二个问题
怎么样在一个类中给另外一个类发送消息!请详细说明,用不用加另一个类的头文件等等!
//第三个问题
我在程序中调用ExWindowsEx(EWX_REBOOT,0)和ExWindowsEx(EWX_FORCE,0)电脑都会注销,而不是重新启动或者关闭计算机,而ExWindowsEx(EWX_SHUNDOWN,0)却没什么反应,但我用关闭计算机却可以正常工作,请问这是怎么会事啊?
BOOL MySystemShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
return FALSE;
// Shut down the system and force all applications to close.
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
return FALSE; return TRUE;
}
如果第二个类是一个窗口,用SendMessage/PostMessage
如果第二个类是一个线程,用PostThreadMessage
如果第二个类什么都不是,直接调用函数
2:如果晓得另个窗口的句柄,可以用句柄来发消息。(不是类向类发消息,类是不能发消息或收消息的,在有窗口可以)
::SendMessage(HWND,MESSAGE,WPARAM,LPARAM);
eg.
::SendMessage(hWnd,WM_CLOSE,0,0);
3:程序的权限不够,需要自己修改权限。
BOOL MySystemShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
return FALSE;
// Shut down the system and force all applications to close.
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
return FALSE; return TRUE;
}