窗体输出问题 是在想不出什么好的方法 求解答

yahua 2012-03-07 09:02:28
问题:在窗口中输出“Jason Wu has already dressed the wife of the most powerful man on earth - creating the stunning, inauguration ball gown for US First Lady Michelle Obama - and for his collection last fall he sought inspiration from a formidable ruler from yesteryear, the French king Louis XIV. The Jason Wu brand is now firmly established, with a presence in more than 140 stores worldwide, including high-end outlets in China. In between designing two Jason Wu collections, the most recent one hitting the catwalks of New York Fashion Week earlier this month, the sudden celebrity has been whizzing around the globe, including regular promotional trips to Hong Kong and Beijing.”并相应滚动条的各项操作。


本来的代码:
#include<windows.h>
#include<stdio.h>

WNDCLASS wndclass;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //回调函数 处理消息

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[]=TEXT ("HelloWin"); //定义一个字符串,用于下面窗体类的命名
//WNDCLASS wndclass; //定义窗体类的对象

/*****************定义窗体的特征****************/
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc =WndProc;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hInstance =hInstance;
wndclass.hIcon =LoadIcon (NULL, IDI_ERROR);
wndclass.hCursor = LoadCursor (NULL, IDC_APPSTARTING);
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;

RegisterClass (&wndclass); //注册窗体

HWND hwnd; //创建窗体句柄
hwnd= CreateWindow(szAppName, //创建窗体
"23_FirstWindowsProgram",
WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,
100,
100,
300,
300,
NULL,
NULL,
hInstance,
NULL);

ShowWindow (hwnd, iCmdShow); //显示窗体
UpdateWindow (hwnd); //更新窗体

MSG msg; //定义消息结构体的对象
while(GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg); //转化消息
DispatchMessage (&msg); //传播消息
}

return 0;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxChar, cxCaps, cyChar, cxClient, cyClient, iMaxWidth ;
HDC hdc ;
int i, x, y, iVertPos, iHorzPos, iPaintBeg, iPaintEnd ;
PAINTSTRUCT ps ;
SCROLLINFO si ;
TCHAR szBuffer[10000]="Jason Wu has already dressed the wife of the most powerful man on earth - creating the stunning, inauguration ball gown for US First Lady Michelle Obama - and for his collection last fall he sought inspiration from a formidable ruler from yesteryear, the French king Louis XIV. The Jason Wu brand is now firmly established, with a presence in more than 140 stores worldwide, including high-end outlets in China. In between designing two Jason Wu collections, the most recent one hitting the catwalks of New York Fashion Week earlier this month, the sudden celebrity has been whizzing around the globe, including regular promotional trips to Hong Kong and Beijing";
TCHAR *p = szBuffer;
TEXTMETRIC tm ;

switch (message)
{
case WM_CREATE:
hdc = GetDC (hwnd) ;

GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2 ;
cyChar = tm.tmHeight + tm.tmExternalLeading ;

ReleaseDC (hwnd, hdc) ;

// Save the width of the three columns
SetScrollRange (hwnd, SB_VERT, 0, 29, FALSE) ;
SetScrollPos (hwnd, SB_VERT, 0, TRUE) ;
iMaxWidth = 40 * cxChar + 22 * cxCaps ;
return 0 ;

case WM_SIZE:
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;

// Set vertical scroll bar range and page size

si.cbSize = sizeof (si) ;
si.fMask = SIF_RANGE | SIF_PAGE ;
si.nMin = 0 ;
si.nMax = 29 ;
si.nPage = cyClient / cyChar ;
SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;

// Set horizontal scroll bar range and page size

si.cbSize = sizeof (si) ;
si.fMask = SIF_RANGE | SIF_PAGE ;
si.nMin = 0 ;
si.nMax = 2 + iMaxWidth / cxChar ;
si.nPage = cxClient / cxChar ;
SetScrollInfo (hwnd, SB_HORZ, &si, TRUE) ;
return 0 ;

case WM_VSCROLL:
// Get all the vertial scroll bar information

si.cbSize = sizeof (si) ;
si.fMask = SIF_ALL ;
GetScrollInfo (hwnd, SB_VERT, &si) ;

// Save the position for comparison later on

iVertPos = si.nPos ;

switch (LOWORD (wParam))
{
case SB_TOP:
si.nPos = si.nMin ;
break ;

case SB_BOTTOM:
si.nPos = si.nMax ;
break ;

case SB_LINEUP:
si.nPos -= 1 ;
break ;

case SB_LINEDOWN:
si.nPos += 1 ;
break ;

case SB_PAGEUP:
si.nPos -= si.nPage ;
break ;

case SB_PAGEDOWN:
si.nPos += si.nPage ;
break ;

case SB_THUMBTRACK:
si.nPos = si.nTrackPos ;
break ;

default:
break ;
}
// Set the position and then retrieve it. Due to adjustments
// by Windows it may not be the same as the value set.

si.fMask = SIF_POS ;
SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;
GetScrollInfo (hwnd, SB_VERT, &si) ;

// If the position has changed, scroll the window and update it

if (si.nPos != iVertPos)
{
ScrollWindow (hwnd, 0, cyChar * (iVertPos - si.nPos),
NULL, NULL) ;
UpdateWindow (hwnd) ;
}
return 0 ;

case WM_HSCROLL:
// Get all the vertial scroll bar information

si.cbSize = sizeof (si) ;
si.fMask = SIF_ALL ;

// Save the position for comparison later on

GetScrollInfo (hwnd, SB_HORZ, &si) ;
iHorzPos = si.nPos ;

switch (LOWORD (wParam))
{
case SB_LINELEFT:
si.nPos -= 1 ;
break ;

case SB_LINERIGHT:
si.nPos += 1 ;
break ;

case SB_PAGELEFT:
si.nPos -= si.nPage ;
break ;

case SB_PAGERIGHT:
si.nPos += si.nPage ;
break ;

case SB_THUMBPOSITION:
si.nPos = si.nTrackPos ;
break ;

default :
break ;
}
// Set the position and then retrieve it. Due to adjustments
// by Windows it may not be the same as the value set.

si.fMask = SIF_POS ;
SetScrollInfo (hwnd, SB_HORZ, &si, TRUE) ;
GetScrollInfo (hwnd, SB_HORZ, &si) ;

// If the position has changed, scroll the window

if (si.nPos != iHorzPos)
{
ScrollWindow (hwnd, cxChar * (iHorzPos - si.nPos), 0,
NULL, NULL) ;
}
return 0 ;

case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;

// Get vertical scroll bar position

si.cbSize = sizeof (si) ;
si.fMask = SIF_POS ;
GetScrollInfo (hwnd, SB_VERT, &si) ;
iVertPos = si.nPos ;

// Get horizontal scroll bar position

GetScrollInfo (hwnd, SB_HORZ, &si) ;
iHorzPos = si.nPos ;

// Find painting limits

iPaintBeg = max (0, iVertPos + ps.rcPaint.top / cyChar) ;
iPaintEnd = min (75,
iVertPos + ps.rcPaint.bottom / cyChar) ;

p=&szBuffer[(iPaintBeg)*(int)(300/cxCaps)];
for (i = iPaintBeg ; i <= iPaintEnd ; i++)
{
x = cxCaps * (1 - iHorzPos) ;
y = cyChar * (i - iVertPos) ;
for(int j=0; j< (int)(300/cxCaps); j++)
{
TextOut(hdc, x+(j*cxCaps), y, p, strlen(p));
p++;
if(*p=='\0')
{

i=iPaintEnd+1;
break;
}
}

}

EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;

}
...全文
69 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2012-03-08
  • 打赏
  • 举报
回复
用edit控件
  • 打赏
  • 举报
回复
你的问题是什么啊

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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