一个对话框程式,在其上面放一些图片,用的是Picture控件.
我想在同一个大的图片位置范围内放几个小的图片,不过在不同的屏幕分辨率上会有不一样的坐标点,表现出来的现象就是当在这种分辨率的机器上,用鼠标点击不同的位置,图片很准确地跟随它而动,但如果程式运行在另一种分辨率的机器上,位置却乱了,如何能实现坐标变换呢,使得程式不会随着分辨率不一样而效果却一样?
void CConfigDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// CRect tRect;
// CWnd* pWnd;
// pWnd = CWnd::FromHandle(::GetDlgItem(GetSafeHwnd 
//(),IDC_BKGROUND));
// pWnd->GetClientRect(&tRect);
CRect r;
CRect rBasePoint;
rBasePoint.top=60;
rBasePoint.bottom=85;
rBasePoint.left=575;
rBasePoint.right=600; switch (ThemeItem[ThemeDataItem])
{
case item_music_player:
//m_MusicPlayerPic.GetWindowRect(&r);
r.top=rBasePoint.top+m_Theme.ImgFile[item_music_player].y;
r.bottom=rBasePoint.bottom+m_Theme.ImgFile[item_music_player].y;
r.left=rBasePoint.left+m_Theme.ImgFile[item_music_player].x;
r.right=rBasePoint.right+m_Theme.ImgFile[item_music_player].x;
ScreenToClient(&r);
m_MusicPlayerPic.MoveWindow(r);

解决方案 »

  1.   

    是这个意思,就是通过鼠标在对话框上所移至的位置,来调整CPicture控件的位置,使它随着鼠标
    左键的点击位置而移动.
    在timer中得到鼠标的位置.
    void CThemeConfigDlg::OnTimer(UINT nIDEvent)
    {
    int BaseX = 389;
    int BaseY = 19;
    POINT point;
        GetCursorPos(&point);
    ScreenToClient(&point);
    int x=point.x;
    int y=point.y;
    char bufX[100],bufY[100];
    if((x>=389)&&(y>=19)&&(y<=339)&&(x<=629))
    {
    x=x-BaseX;
    y=y-BaseY;
    sprintf(bufX,"%d",x);
    sprintf(bufY,"%d",y); switch (ThemeItem[ThemeDataItem])
    {
    case item_music_player:
    sMusicPlayerX=CString(bufX);
    sMusicPlayerY=CString(bufY);
    m_Theme.ImgFile[item_music_player].x=x;
    m_Theme.ImgFile[item_music_player].y=y;