嗯嗯- -b rt.
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) /**//* frame.h :os::frame */
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#ifndef APPFRAME__
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#define APPFRAME__
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include "axiom.h"
#include "string.h"
#include "geo.h"
#include "runtime.h"
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include "vector.h"
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
namespace gui
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif) {
class component
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) arith::point pos;/**//*position*/
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) int isvis;/**//*is visible*/
double getx();
double gety();
arith::point getpos();
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
};
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
class gtext:public component
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
adt::ustring text;
public:
gtext(adt::ustring _t,int x,int y,int isv=1);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
};
class gbutton:public component
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
geo::polygon figure;
adt::ustring text;
COLORREF bklist[5];
gbutton(int _x,int _y);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int isIn(int _x,int _y);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
};
class compoList
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
int i;
adt::vector<gbutton*> buttonList;
adt::vector<gtext*> textList;
};
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
namespace appinfo
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static const int max_form=500;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static int iCmdShow,regNum,listIndex;
static HINSTANCE hInstance;
static HINSTANCE hPrevInstance;
static PSTR szCmdLine;
static MSG msg;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* register windowclass-name */
static TCHAR regList[max_form][4];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static void decform();
static void incform();
static void setListIndex(int & reg_index,LPCWSTR & wc_name);
static gui::compoList controlList[appinfo::max_form];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
namespace frame
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
using adt::ustring;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
using adt::vector;
using arith::point;
using geo::polygon;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
class compoList;
class form;
//using namespace adt;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
namespace api
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
class def
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
static const int nil =0;
static const int sm_x = 0;
static const int sm_y = 1;
static const int wm_create=WM_CREATE;
static const int wm_paint=WM_PAINT;
static const int wm_destroy=WM_DESTROY;
static const int wm_mousemove=WM_MOUSEMOVE;
static const int wm_lbuttondown=WM_LBUTTONDOWN;
static const int wm_lbuttonup=WM_LBUTTONUP;
static const int wm_lbuttondblclk=WM_LBUTTONDBLCLK;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static const unsigned int cs_default= CS_HREDRAW | CS_VREDRAW ;
};
namespace type
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
typedef HDC__* hdc;
typedef HWND hwnd;
typedef ustring string;
typedef UINT uint;
typedef RECT rect;
typedef LPRECT lprc;
typedef WPARAM wp;
typedef LPCWSTR lpcwstr;
typedef LPARAM lp;
typedef PAINTSTRUCT ps;
typedef LPPAINTSTRUCT lpps;
typedef BYTE byte;
typedef LONG_PTR result;
typedef WNDCLASS wndclass;
typedef HICON hicon;
typedef HCURSOR hcursor;
typedef HBRUSH__* hbrush;
typedef HINSTANCE hinstance;
typedef PSTR pstr;
typedef MSG msg;
typedef TCHAR tchar;
typedef BOOL state;
typedef POINT point;
}
namespace handle
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
type::hicon icon(int i=0);
type::hcursor cursor(int i=0);
type::hbrush brush(int i=WHITE_BRUSH);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
class paint
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
type::hdc hdc;
type::rect rect;
type::hwnd hwnd;
type::ps ps;
bool ready;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) paint():ready(false) {}
~paint();
type::hdc begin(type::hwnd & hwnd);
int end();
int text(type::string & tx);
type::state polygon(type::point *apt,int i,int m=WHITE_BRUSH);
type::state rectangle(int x,int y,int w,int h);
type::state line(int x,int y,int x_,int y_);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
};
class mouse
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
static double x(type::lp & lp);
static double y(type::lp & lp);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
};
class sm
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
static int screeny();
static int screenx();
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
};
class message
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
};
class proc
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
type::hwnd hwnd;
type::uint msg;
type::wp wp;
type::lp lp;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) proc() {}
proc(type::hwnd &hwnd_t,type::uint &msg_t,type::wp &wp_t,type::lp &lp_t);
void update(type::hwnd &hwnd_t,type::uint &msg_t,type::wp &wp_t,type::lp &lp_t);
type::result defproc();
void postquit(int exitCode_t=0);
};
class bitmap
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
HBITMAP hBitmap ;
HDC hdcMem ;
int cxBitmap, cyBitmap;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
public:
int begin(HWND hwnd);
void setPixel(int x,int y,COLORREF cl=RGB(100,0,0));
int paint(HWND hwnd,int cxClient,int cyClient);
int end();
void getLargestDisplayMode (int *pcxBitmap, int * pcyBitmap);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
};
static void d2s(wchar_t s[],double d,int p=2);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
class wndclass
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public:
type::hwnd hwnd ;
type::hwnd parenthwnd;
type::string title;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) type::wndclass wc;/**//* wndclass info */
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) int regIndex;/**//* self-wndclass index in regList */
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static type::result __stdcall wndproc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
void init();
wndclass();
~wndclass();
void setStyle(UINT style);
void setIcon(HICON hIcon);
void setCursor(HCURSOR hCursor);
void setBackground(HBRUSH hbr);
int renew();
void setTitle(wchar_t _title[]);
};
}
class form
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
api::wndclass tf;
public:
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
form();
~form();
form(wchar_t *title);
int add(gui::gtext & control_gtext);
int show();
};
}
int cpp();
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#endif
实现部分:
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) /**//* frame.cpp os::frame*/
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include "appframe.h"
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
namespace gui
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif) {
double component::getx()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return pos.x_;
}
double component::gety()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return pos.y_;
}
arith::point component::getpos()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return pos;
}
gtext::gtext(adt::ustring _t,int x,int y,int isv)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
pos.set(x,y);
isvis=isv;
text=_t;
}
gbutton::gbutton(int _x,int _y)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
pos.x_=_x;
pos.y_=_y;
figure.push(0,0);
figure.push(0,50);
figure.push(100,50);
figure.push(100,0);
figure.add(_x,_y);
text<<"Button";
bklist[0]=RGB(12,0,0);
bklist[1]=RGB(41,12,44);
bklist[2]=RGB(111,111,111);
}
int gbutton::isIn(int _x,int _y)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return figure.isIn(_x,_y);
}
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
namespace appinfo
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif) {
void decform()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
--regNum;
}
void incform()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
++regNum;
}
void setListIndex(int & reg_index,LPCWSTR & wc_name)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
reg_index=listIndex;
regList[listIndex][0]=1;
regList[listIndex][1]=reg_index;
regList[listIndex][2]=0;
wc_name=regList[listIndex];
++listIndex;
++regNum;
}
}
namespace frame
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
namespace api
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
type::hicon handle::icon(int i)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return LoadIcon (NULL, IDI_APPLICATION);
}
type::hcursor handle::cursor(int i)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return LoadCursor (NULL, IDC_ARROW);
}
type::hbrush handle::brush(int i)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return (type::hbrush) GetStockObject (i);
}
paint::~paint()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
if(ready!=false)
end();
ready=false;
}
type::hdc paint::begin(type::hwnd & hwnd)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
ready=true;
hdc = BeginPaint(hwnd,&ps);
GetClientRect (hwnd, &rect);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return (hdc );
}
int paint::end()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
ready=false;
return EndPaint(hwnd,&ps);
}
int paint::text(type::string & tx)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
if(ready)
return DrawTextW (hdc, tx(), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
else return 0;
}
type::state paint::rectangle(int x,int y,int w,int h)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
int sx=sm::screenx();
int sy=sm::screeny();
return Rectangle (hdc,x,y,x+w, y+h) ;
}
type::state paint::polygon(type::point *apt,int i,int m)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
SelectObject(hdc,GetStockObject(m));
return Polygon(hdc,apt,i) ;
}
type::state paint::line(int x,int y,int x_,int y_)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
MoveToEx (hdc, x, y, NULL) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return LineTo (hdc, x_, y_) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
double mouse::x(type::lp & lp)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return LOWORD(lp) ;
}
double mouse::y(type::lp & lp)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return HIWORD(lp) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
int sm::screenx()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return GetSystemMetrics(def::sm_x);
}
int sm::screeny()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return GetSystemMetrics(def::sm_y);
}
proc::proc(type::hwnd &hwnd_t,type::uint &msg_t,type::wp &wp_t,type::lp &lp_t)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
update(hwnd_t,msg_t,wp_t,lp_t);
}
void proc::update(type::hwnd &hwnd_t,type::uint &msg_t,type::wp &wp_t,type::lp &lp_t)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
hwnd=hwnd_t;
msg=msg_t;
wp=wp_t;
lp=lp_t;
}
type::result proc::defproc()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
return DefWindowProcW (hwnd, msg, wp, lp);
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
void proc::postquit(int exitCode_t)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
if(appinfo::regNum==1)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
--appinfo::regNum;
PostQuitMessage(exitCode_t);
}else
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
--appinfo::regNum;
}
}
int bitmap::begin(HWND hwnd)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
getLargestDisplayMode (&cxBitmap, &cyBitmap) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
HDC hdc = GetDC (hwnd) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
hBitmap = CreateCompatibleBitmap (hdc, cxBitmap, cyBitmap) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
hdcMem = CreateCompatibleDC (hdc) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
ReleaseDC (hwnd, hdc) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (!hBitmap) // no memory for bitmap
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
DeleteDC (hdcMem) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return -1 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
SelectObject (hdcMem, hBitmap) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
PatBlt (hdcMem, 0, 0, cxBitmap, cyBitmap, WHITENESS) ;
return 0 ;
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
void bitmap::setPixel(int x,int y,COLORREF cl)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
SetPixel(hdcMem,x,y,cl);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
int bitmap::paint(HWND hwnd,int cxClient,int cyClient)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
PAINTSTRUCT ps;
HDC hdc = BeginPaint (hwnd, &ps) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
BitBlt (hdc, 0, 0, cxClient, cyClient, hdcMem, 0, 0, SRCCOPY) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
EndPaint (hwnd, &ps) ;
return 1;
}
int bitmap::end()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
DeleteDC (hdcMem) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
DeleteObject (hBitmap) ;
return 1;
}
void bitmap::getLargestDisplayMode (int *pcxBitmap, int * pcyBitmap)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
DEVMODE devmode ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int iModeNum = 0 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
* pcxBitmap = *pcyBitmap = 0 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
ZeroMemory (&devmode, sizeof (DEVMODE)) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
devmode.dmSize = sizeof (DEVMODE) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
while (EnumDisplaySettings (NULL, iModeNum++, &devmode))
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
*pcxBitmap = max ( *pcxBitmap, (int) devmode.dmPelsWidth) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
*pcyBitmap = max ( *pcyBitmap, (int) devmode.dmPelsHeight) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
static void d2s(wchar_t s[],double d,int p)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int i,a;
for(int j=0;s[j]!=0;j++)
if(s[j]=='.')
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
i=1;
}
if(p==0)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
a=d;
for(i=0;a/10.0>0.0;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
s[i]=(wchar_t)(10*(a/10.0-(int)(a/10))+48);
a/=10;
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}else
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
a=(int)(d*pow(10.0,p));
for(i=0;i!=p;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
s[i]=(wchar_t)(10*(a/10.0-(int)(a/10))+48);
a/=10;
}
s[p]=(wchar_t)'.';
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(i=p+1;a/10.0>0.0;i++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
s[i]=(wchar_t)(10*(a/10.0-(int)(a/10))+48);
a/=10;
}
}
s[i]=0;
a=i-1;
i=0;
char t;
for(;i<a;i++,a--)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
t=s[i];
s[i]=s[a];
s[a]=t;
}
}
type::result __stdcall wndclass::wndproc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static proc proc;
static paint pt;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
using geo::polygon;
static polygon plg;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static int temp=0;
static int cxClient, cyClient, x, y;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static POINT apt[6];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static gui::gbutton button(100,100);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static bitmap bm;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
static wchar_t buf[20];
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
proc.update(hwnd,message,wParam,lParam);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
switch (message)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
case WM_SIZE:
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cxClient = LOWORD (lParam) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cyClient = HIWORD (lParam) ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for(int y=0;y!=cyClient;y++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
for(int x=0;x!=cxClient;x++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
bm.setPixel(x,y,RGB(111,0,4));
}
}
InvalidateRect(hwnd,0,TRUE);
return 0;
case WM_TIMER:
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return 0;
case api::def::wm_lbuttondown:
x=mouse::x(lParam),y=mouse::y(lParam);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
InvalidateRect(hwnd,NULL,TRUE);
return 0;
case api::def::wm_create:
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bm.begin(hwnd);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return 0 ;
case api::def::wm_mousemove:
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
x=mouse::x(lParam),y=mouse::y(lParam);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return 0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
case api::def::wm_paint:
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bm.paint(hwnd,cxClient,cyClient);
return 0;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
case api::def::wm_destroy:
bm.end();
proc.postquit();
return 0 ;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
return proc.defproc();
}
void wndclass::init()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
wc.style = def::cs_default;
wc.lpfnWndProc = wndproc ;
wc.cbClsExtra = def::nil ;
wc.cbWndExtra = def::nil ;
wc.hInstance = appinfo::hInstance ;
wc.hIcon = handle::icon() ;
wc.hCursor = handle::cursor();
wc.hbrBackground = handle::brush();
wc.lpszMenuName = def::nil;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
appinfo::setListIndex(regIndex,wc.lpszClassName);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (!RegisterClassW (&wc))
return ;
}
wndclass::wndclass()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
init();
}
wndclass::~wndclass()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
appinfo::decform();
}
void wndclass::setStyle(UINT style)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
wc.style = style;
}
void wndclass::setIcon(HICON hIcon)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
wc.hIcon = hIcon;
}
void wndclass::setCursor(HCURSOR hCursor)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
wc.hCursor = hCursor;
}
void wndclass::setBackground(HBRUSH hbr)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
wc.hbrBackground = hbr;
}
int wndclass::renew()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
hwnd = CreateWindowW(appinfo::regList[regIndex], // window class name
title(), // 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
appinfo::hInstance, // program instance handle
NULL) ; // creation parameters
return 1;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
void wndclass::setTitle(wchar_t _title[])
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
title.set(_title);
}
}
form::form()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
tf.setTitle(TEXT("ving"));
tf.init();
tf.renew();
}
form::~form()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
}
form::form(wchar_t *title)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
tf.setTitle(title);
tf.init();
tf.renew();
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int form::add(gui::gtext & control_gtext)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
appinfo::controlList[tf.regIndex].textList.push(&control_gtext);
return 1;
}
int form::show()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
tf.renew();
int scx=api::sm::screenx();
int scy=api::sm::screeny();
SetWindowPos(tf.hwnd,NULL,scx/3 ,scx/3 ,scx/3,scy/3,SWP_HIDEWINDOW);
ShowWindow (tf.hwnd, appinfo::iCmdShow) ;
UpdateWindow (tf.hwnd) ;
return 1;
}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif) {
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
appinfo::regNum=0;
appinfo::listIndex=0;
appinfo::hInstance=hInstance;
appinfo::hPrevInstance=hPrevInstance;
appinfo::szCmdLine=szCmdLine;
appinfo::iCmdShow=iCmdShow;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cpp();
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
while (GetMessageW(&appinfo::msg, NULL, 0, 0))
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
TranslateMessage (&appinfo::msg) ;
DispatchMessage (&appinfo::msg) ;
}
return (int)appinfo::msg.wParam ;
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
史上最短小的demo:
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) /**//**//**//* init.h */
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include "appframe.h"
//#include "component.h"
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int cpp()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif) {
using frame::form;
using gui::gtext;
form f;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
adt::ustring s(L"ving");
gtext text(s,100,150);
f.add(text);
f.show();
return 0;
}
睡觉....zzzZZzz。
|