用这个函数自己打开我自己定制的窗口 ,但是我想得到窗口中的控件的句柄,但是我怎么也得不到函数很简单:
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPTSTR    lpCmdLine,
                   int       nCmdShow)
{
MSG msg;
InitCommonControls(); DialogBoxParam(hInstance, (LPCWSTR )IDD_About, NULL, WndProc, NULL); // Run the message pump
while( GetMessage( &msg, NULL, 0, 0 ))
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return (int) msg.wParam;
}
// Message handler for about box.
INT_PTR CALLBACK WndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{ HWND bri_slider=NULL;
HWND zom_slider=NULL;
///看下面的得到控件的操作 这里得到的bri_slider 就是等于NULL
//如果改成bri_slider=GetDlgItem(hDlg,IDC_BRIGHTNESS_SLIDER)结果还是一样
//我用GetWindlong得到hdlg的ID并不等于IDD_About, 而bri_slider的控件就是在IDD_About的窗口中
// 我如何才能得到 IDC_BRIGHTNESS_SLIDER的控制的句柄呢? 谢谢
       bri_slider=GetDlgItem(GetDlgItem(hDlg,IDD_About),IDC_BRIGHTNESS_SLIDER);
if(bri_slider== NULL)
RETAILMSG(1,(L"bright slider is error\n"));
    switch (message)
    {
        case WM_INITDIALOG:
RETAILMSG(1,(L"-WM_INITDIALOG \n"));
       
            int DlgWidth, DlgHeight; // dialog width and height in pixel units
//    SHFullScreen(m_hWndViewfinder, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON |  SHFS_HIDESTARTICON); DlgHeight=GetSystemMetrics(SM_CXSCREEN);
DlgWidth=GetSystemMetrics(SM_CYSCREEN);

MoveWindow(hDlg, 0, 0, DlgHeight, DlgWidth, TRUE); 
            return (INT_PTR)TRUE;        case WM_COMMAND:
RETAILMSG(1,(L"-WM_COMMAND \n"));
            if ( LOWORD(wParam) == IDC_Close)
            {
                EndDialog(hDlg, LOWORD(wParam));
PostQuitMessage(0);
                return TRUE;
            }
            break;        case WM_CLOSE:
RETAILMSG(1,(L"-WM_CLOSE \n"));
            EndDialog(hDlg, message);
PostQuitMessage(0);
            return TRUE;    }
    return (INT_PTR)FALSE;
}我如何才能得到 IDC_BRIGHTNESS_SLIDER的控制的句柄呢? 谢谢

解决方案 »

  1.   

    那是因为IDD_About已是主窗体了 hDlg就是IDD_About 不能使用GetDlgItem(hDlg,IDD_About)改为 bri_slider=GetDlgItem(hDlg,IDC_BRIGHTNESS_SLIDER); 
    后第一次运行窗体未初始化会得不到,第二次就可以了
      

  2.   


    我在成功的时候也打印信息
       bri_slider=GetDlgItem(GetDlgItem(hDlg,IDD_About),IDC_BRIGHTNESS_SLIDER); 
    if(bri_slider== NULL) 
       RETAILMSG(1,(L"bright slider is error\n")); 
    else
       RETAILMSG(1,(L"bright slider is OK \n")); 
      而且把这句话放在
    case WM_INITDIALOG: 
    的情况 也根本没有打印出来
    bright slider is OK  而是 只有error所以你认为这样的是不对的