Win32 的框架代码

Posted on 2008-01-11 03:00 MiweiDev 阅读(793) 评论(3)  编辑 收藏 引用 所属分类: Win32 SDk

老是写同样的代码,自己也懒得记,就把他放在上面以后方便用:

#include <windows.h>

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

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, 
int iCmdShow)
{
    static TCHAR szAppName[] 
= TEXT ("HelloWin") ;
    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,    // window class name
            TEXT (
"The Hello Program"),    // window caption
            WS_OVERLAPPEDWINDOW,    
// window style
            CW_USEDEFAULT,    
// initial x position
            CW_USEDEFAULT,    
// initial y position
            CW_USEDEFAULT,    
// initial x size
            CW_USEDEFAULT,    
// initial y size
            
NULL,            // parent window handle
            
NULL,            // window menu handle
            hInstance,        
// program instance handle
            
NULL) ;         // creation parameters
     
    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;
     
    
while (GetMessage (&msg, NULL00))
     {
        TranslateMessage (
&msg) ;
          DispatchMessage (
&msg) ;
     }
    return (
int)msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC            hdc ;
    PAINTSTRUCT ps ;
    RECT        rect ;
     
    switch (message)
     {
    
case     WM_PAINT:
        hdc 
= BeginPaint (hwnd, &ps) ;
          
        GetClientRect (hwnd, 
&rect) ;
          
        DrawText (hdc, TEXT (
"Hello, Windows XP!"), -1&rect,
            DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
              EndPaint (hwnd, 
&ps) ;
            return 
0 ;
          
    
case    WM_DESTROY:
        PostQuitMessage (
0) ;
        return 
0 ;
     }
   return DefWindowProc (hwnd, message, wParam, lParam) ;
}

Feedback

# re: Win32 的框架代码  回复  更多评论   

2008-01-20 16:45 by 小不点
固定窗口的大小:

case WM_GETMINMAXINFO:
{
// Don't allow resizing in windowed mode.
// Fix the size of the window to 640x480 (client size)
MINMAXINFO* pMinMax = (MINMAXINFO*) lParam;

DWORD dwFrameWidth = GetSystemMetrics( SM_CXSIZEFRAME );
DWORD dwFrameHeight = GetSystemMetrics( SM_CYSIZEFRAME );
DWORD dwMenuHeight = GetSystemMetrics( SM_CYMENU );
DWORD dwCaptionHeight = GetSystemMetrics( SM_CYCAPTION );

pMinMax->ptMinTrackSize.x = WINDOW_WIDTH + dwFrameWidth * 2;
pMinMax->ptMinTrackSize.y = WINDOW_HEIGHT + dwFrameHeight * 2 +
dwMenuHeight + dwCaptionHeight;

pMinMax->ptMaxTrackSize.x = pMinMax->ptMinTrackSize.x;
pMinMax->ptMaxTrackSize.y = pMinMax->ptMinTrackSize.y;
}
return 0L;

# re: Win32 的框架代码  回复  更多评论   

2008-12-11 11:00 by cpy
case WM_GETMINMAXINFO:
WIDTH_WIDTH是楼主自定义(640)吗?
如果这样,pMinMax->ptMinTrackSize.x
=WINDOW_WIDTH+dwFrameWidth*2-GetSystemMetrics(SM_CXBORDER)。更准确一点.
pMinMax->ptMinTrackSize.y类似。

# re: Win32 的框架代码  回复  更多评论   

2008-12-11 17:05 by 小不点
Thank You!

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理