WIN32 SDK 编程时,按钮等其它控件在那找?难倒全是用作图函数在相关事件中画出来的?

大连刘 2006-04-07 03:07:41
如题
...全文
188 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
九道天书 2007-03-12
  • 打赏
  • 举报
回复
楼上有没有《windows程序设计》第五版的配套光盘的程序,能不能发一份到小弟的邮箱
(c-seth@163.com)。
我有书的电子版,但是配套光盘的程序一直没找到,先谢了。
fdimim 2006-04-07
  • 打赏
  • 举报
回复

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

static HWND hwndButton[NUM] ;

static RECT rect ;

static TCHAR szTop[] = TEXT ("message wParam lParam"),

szUnd[] = TEXT ("_______ ______ ______"),

szFormat[] = TEXT ("%-16s%04X-%04X %04X-%04X"),

szBuffer[50] ;

static int cxChar, cyChar ;

HDC hdc ;

PAINTSTRUCT ps ;

int i ;



switch (message)

{

case WM_CREATE :

cxChar = LOWORD (GetDialogBaseUnits ()) ;

cyChar = HIWORD (GetDialogBaseUnits ()) ;



for (i = 0 ; i < NUM ; i++)

hwndButton[i] =CreateWindow ( TEXT("button"),button[i].szText,

WS_CHILD | WS_VISIBLE | button[i].iStyle,

cxChar, cyChar * (1 + 2 * i),

20 * cxChar, 7 * cyChar / 4,

hwnd, (HMENU) i,

((LPCREATESTRUCT) lParam)->hInstance, NULL) ;

return 0 ;


case WM_SIZE :

rect.left = 24 * cxChar ;

rect.top = 2 * cyChar ;

rect.right = LOWORD (lParam) ;

rect.bottom = HIWORD (lParam) ;

return 0 ;

case WM_PAINT :

InvalidateRect (hwnd, &rect, TRUE) ;



hdc = BeginPaint (hwnd, &ps) ;

SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;

SetBkMode (hdc, TRANSPARENT) ;



TextOut (hdc, 24 * cxChar, cyChar, szTop, lstrlen (szTop)) ;

TextOut (hdc, 24 * cxChar, cyChar, szUnd, lstrlen (szUnd)) ;



EndPaint (hwnd, &ps) ;

return 0 ;



case WM_DRAWITEM :

case WM_COMMAND :

ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ;



hdc = GetDC (hwnd) ;

SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;



TextOut( hdc, 24 * cxChar, cyChar * (rect.bottom / cyChar - 1),

szBuffer,

wsprintf (szBuffer, szFormat,

message == WM_DRAWITEM ? TEXT ("WM_DRAWITEM") :

TEXT ("WM_COMMAND"),

HIWORD (wParam), LOWORD (wParam),

HIWORD (lParam), LOWORD (lParam))) ;



ReleaseDC (hwnd, hdc) ;

ValidateRect (hwnd, &rect) ;

break ;



case WM_DESTROY :

PostQuitMessage (0) ;

return 0 ;

}

return DefWindowProc (hwnd, message, wParam, lParam) ;

}
fdimim 2006-04-07
  • 打赏
  • 举报
回复
//按钮也是窗口,只是样式不同而已。
//拷个《windows程序设计的例子》

下面我们将通过叫做BTNLOOK(「button look」)的程序来开始介绍按钮窗口类别,如程序9-1所示。BTNLOOK建立10个子窗口按钮控件,每个控件对应一个标准的按钮样式,因此共有10种标准按钮样式。

程序9-1 BTNLOOK

*--------------------------------------------------------------------------

BTNLOOK.C -- Button Look Program

(c) Charles Petzold, 1998

---------------------------------------------------------------------------*/

#include <windows.h>

struct

{

int iStyle ;

TCHAR * szText ;

}

button[] =

{

BS_PUSHBUTTON, TEXT ("PUSHBUTTON"),

BS_DEFPUSHBUTTON, TEXT ("DEFPUSHBUTTON"),

BS_CHECKBOX, TEXT ("CHECKBOX"),

BS_AUTOCHECKBOX, TEXT ("AUTOCHECKBOX"),

BS_RADIOBUTTON, TEXT ("RADIOBUTTON"),

BS_3STATE, TEXT ("3STATE"),

BS_AUTO3STATE, TEXT ("AUTO3STATE"),

BS_GROUPBOX, TEXT ("GROUPBOX"),

BS_AUTORADIOBUTTON, TEXT ("AUTORADIO"),

BS_OWNERDRAW, TEXT ("OWNERDRAW")

} ;


#define NUM (sizeof button / sizeof button[0])

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static TCHAR szAppName[] = TEXT ("BtnLook") ;

HWND hwnd ;

MSG msg ;

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_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = NULL ;

wndclass.lpszClassName = szAppName ;



if (!RegisterClass (&wndclass))

{

MessageBox ( NULL, TEXT ("This program requires Windows NT!"),

szAppName, MB_ICONERROR) ;

return 0 ;

}



hwnd = CreateWindow (szAppName, TEXT ("Button Look"),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, hInstance, NULL) ;


ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;


while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

return msg.wParam ;

}
healer_kx 2006-04-07
  • 打赏
  • 举报
回复
SDK编程,很灵活,控件,你可以像MFC里那样拖拽,也可以CreateWindow创建。
而且支持自绘,但是相关的消息就比较难找资料了。

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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