更新内容
ジョー・バイデンは副大統領として訪中した際、チャイナが尖閣諸島に軍事的圧力を強めることを許す引き換えに息子の投資会社に10億ドルの出資を受けていた|ジュリアーニ元NY市長が語る
https://bonafidr.com/2020/11/01/%e3%82%b8%e3%83%a7%e3%83%bc%e3%83%bb%e3%83%90%e3%82%a4%e3%83%87%e3%83%b3%e3%81%af%e5%89%af%e5%a4%a7%e7%b5%b1%e9%a0%98%e3%81%a8%e3%81%97%e3%81%a6%e8%a8%aa%e4%b8%ad%e3%81%97%e3%81%9f%e9%9a%9b%e3%80%81/
ウイルスと犯罪者はアジアから
http://otto-kanata.cocolog-nifty.com/blog/2021/01/post-edeb9c.html
日本国民を豊かにして、
日本国民が旅行をしたり、物を買ったりして
経済を回すのが最も効果的に決まっているのに、
そうした政策はやらない。
10万円の特別定額給付金は一度だけ。
Go Toトラベルは効果が出始めたと思ったら
あっさり中止。
最も効果が高い消費税減税は
もはや話題にも上らない。
政府がお金を使うのは、政治家や官僚の利権となる
外国人に対してだけなのである。
【冗談じゃない】ダーク時代をどう乗り切るか
https://youtu.be/YDVeXQ6BbPo
ダーク時代が、必然的に近づいてきている。中国大陸の共〜産〜党統治下にある人々として、恐怖に包まれた時代をどう乗り切るかを皆さんにお話ししよう。
【DHC】2020/12/3(木) 有本香×伊藤俊幸(元海上自衛隊 海将)×小野寺まさる(Skype出演)×居島一平【虎ノ門ニュース】
https://youtu.be/hRC7ONcsdP4
2020.11.11【米大統領選続行中!】ペンシルバニアとミシガンはトランプが取る!ジュリアーニが断言‼️内部告発も続々と【及川幸久−BREAKING−】
https://youtu.be/XPL3Qnf1P2A
【薇羽 看世間】大統領選に現れた怪現象は綿密に練られたクーデター計画
https://youtu.be/Y1-2gaatEq0
バイデンの勝利宣言に複数州が抗議 トランプは提訴へ
https://youtu.be/Mo473OXoQR8
真実を伝えるメディアは黙らされる? 大紀元新唐人グループのアカウントがBAN 大統領選は投票制度を利用した民主党によるクーデター
https://youtu.be/A4b3el1H5KY
RHEL/CentOS7ではiptablesではなくfirewalld
https://qiita.com/varusan/items/fe996c518e8075214b49
■メモリデバイスコンテキストへの描画・転送
・準備
CDC *pdc = GetDC();
if (pdc) {
bResult = m_cdcMem.CreateCompatibleDC(pdc); // CDC
if (bResult) {
m_bmMem.CreateCompatibleBitmap(&m_cdcMem, 256, 256); // CBitmap
m_cdcMem.SelectObject(m_bmMem);
bResult = m_cdcMem.Rectangle(10, 10, 200, 200);
CRect rc(20, 20, 180, 180);
n = m_cdcMem.DrawText(_T("これはメモリ上の描画情報です。"), rc, DT_CENTER | DT_WORDBREAK);
}
ReleaseDC(pdc);
}
・描画(転送)
if (m_bmMem.m_hObject) {
// SRCCOPY SRCPAINT MERGECOPY
//pDC->StretchBlt(100, 100, 256, 256, &m_cdcMem, 0, 0, 256, 256, SRCCOPY);
pDC->BitBlt(100, 100, 256, 256, &m_cdcMem, 0, 0, SRCCOPY);
}
■カーソル移動イベント時に後続の同イベントがある場合は当処理を飛ばす。
■シフトキー・右ボタンによるホイールの水平スクロール化
※エディットコントロールの場合は EM_LINESCROLL をウィンドウへ送信する。
- 横ホイールイベントハンドラ作成
{
BOOL bDoScroll = TRUE;
SIZE sizeScroll = { 0, 0 };sizeScroll.cx = zDelta;
// adjust current x position
int x;
int xOrig = x = GetScrollPos(SB_HORZ);
int xMax = GetScrollLimit(SB_HORZ);
x += sizeScroll.cx;
if (x < 0)
x = 0;
else if (x > xMax)
x = xMax;// adjust current y position
int y;
int yOrig = y = GetScrollPos(SB_VERT);
int yMax = GetScrollLimit(SB_VERT);
y += sizeScroll.cy;
if (y < 0)
y = 0;
else if (y > yMax)
y = yMax;// did anything change?
if (x == xOrig && y == yOrig)
return;if (bDoScroll)
{
// do scroll and update scroll positions
ScrollWindow(-(x - xOrig), -(y - yOrig));
if (x != xOrig)
SetScrollPos(SB_HORZ, x);
if (y != yOrig)
SetScrollPos(SB_VERT, y);
}
return;
} - 縦ホイールの関数内でシフトキーか右ボタンが押されている場合は横ホイール関数を呼び出す。
※フラグは解除しておく。
if ((MK_SHIFT | MK_RBUTTON) & nFlags) {
this->OnMouseHWheel(0, zDelta, pt);
return TRUE;
} - 右ボタンによる水平スクロールを行った場合はメンバー変数へ設定し、右ボタン解放対応時にその変数が設定されている場合は無視する。
■プロパティ値の更新
・プロパティウィンドウクラスへポインターメンバ追加
CMFCPropertyGridProperty *m_propName;
CMFCPropertyGridProperty *m_propComment;
・クラス構築時に生成
m_propName = new CMFCPropertyGridProperty(_T("項目"), (_variant_t)_T("項目の値"), _T("項目の説明"));
m_propName->AllowEdit(FALSE);
m_propComment = new CMFCPropertyGridProperty(_T("コメント"), (_variant_t)_T("コメントの値"), _T("コメントの説明"));
m_propComment->AllowEdit(FALSE);
・初期化時に一覧へ追加
pGroup1->AddSubItem(m_propName);
pGroup1->AddSubItem(m_propComment);
・イベント対処時に値を更新
str.Format(_T("%p"), (void*)ullTick);
m_propName->SetValue(str);
str.Format(_T("%16llu"), ullTick);
m_propComment->SetValue(str);
■マウスホーバー対応
・WM_MOUSEHOVERハンドラを作成する。
・ON_WM_MOUSEMOVEイベント時に登録APIを呼び出す。
{
DWORD dwErr = 0;
TRACKMOUSEEVENT tme;
ZeroMemory(&tme, sizeof(tme));
tme.cbSize = sizeof(tme);
tme.dwFlags = TME_HOVER;
tme.hwndTrack = this->m_hWnd;
tme.dwHoverTime = 1000;
if (!TrackMouseEvent(&tme)) {
dwErr = GetLastError();
::Sleep(0);
}
}
※実際に使用する際は構造体をメンバーとして保持し、構築時等に設定しておく。
ツールヒントについては Tool Tipsを参照。
■ステータスバーへの文字列設定
CWnd* pwnd = ( (CFrameWnd*)AfxGetMainWnd() )->GetMessageBar();
pwnd->SetWindowText( str );
■TVへの挿入
TVINSERTSTRUCTW structure
typedef struct tagTVINSERTSTRUCTW {
HTREEITEM hParent;
HTREEITEM hInsertAfter;
union {
TVITEMEXW itemex;
TV_ITEMW item;
} DUMMYUNIONNAME;
} TVINSERTSTRUCTW, *LPTVINSERTSTRUCTW;
TVINSERTSTRUCT tvi;
ZeroMemory(&tvi, sizeof(TVINSERTSTRUCT));
tvi.hParent = hSrc;
tvi.hInsertAfter = TVI_FIRST; // TVI_LAST
tvi.itemex.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvi.itemex.pszText = _T("手動設定文字列");
tvi.itemex.lParam = 0xABCD;
tvi.itemex.iImage = 1;
tvi.itemex.iSelectedImage = 2;
m_wndFileView.InsertItem(&tvi);
■マウスの進む・戻るボタンの対応
WM_XBUTTONDOWNメッセージを処理する。
シフトキーが押されている場合は水平スクロールを行うなど要検討。※ホイール対応も同様。
■ホイールによる操作
BOOL CAkamataView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。
TRACE(_T("CAkamataView::OnMouseWheel(UINT nFlags = %08X, short zDelta = %d, CPoint pt = {%d,%d})\n"), nFlags, zDelta, pt.x, pt.y);
if (MK_CONTROL & nFlags) {
// キーが押されている。拡大・縮小を行う。
SetScrollInfo(SB_VERT, NULL);
return TRUE;
}
return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
}
void CAkamataView::OnMouseHWheel(UINT nFlags, short zDelta, CPoint pt)
{
// この機能には Windows Vista 以降のバージョンが必要です。
// シンボル _WIN32_WINNT は >= 0x0600 にする必要があります。
// TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。
TRACE(_T("CAkamataView::OnMouseHWheel(UINT nFlags = %08X, short zDelta = %d, CPoint pt)\n"), nFlags, zDelta);
CScrollView::OnMouseHWheel(nFlags, zDelta, pt);
}
protected:
HCURSOR m_hcurHand; // 手のひらカーソル
BOOL CAkamataView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
SetCursor(m_hcurHand);
return TRUE;
}
アプリケーションのヘッダファイルにメッセージを登録
#define YKSM_NOTIFY (WM_APP + 1)
※使用可能な値についてはWM_APPを検索
Range Meaning
0 through WM_USER - 1 Messages reserved for use by the system.
WM_USER through 0x7FFF Integer messages for use by private window classes.
WM_APP through 0xBFFF Messages available for use by applications.
0xC000 through 0xFFFF String messages for use by applications.
Greater than 0xFFFF Reserved by the system.
■アプリクラスに他から参照可能になるようにクラスのポインタを登録。
ビュー: CView *m_pviewMain;
ツリー: CWnd *m_pwndTree;
プロパティ: CWnd *m_pwndProperty;
・各ビュー作成時に自身をアプリクラスの該当するポインターへ登録。
PreCreateWindow()等
・各ビューでメッセージ対応関数を登録。
ON_MESSAGE(YKSM_NOTIFY, &CAkamataView::OnYksmNotify)
■ファイルのドロップにより開く
・メインフレームのOnCreate()で this->DragAcceptFiles() を実行する。
■ドキュメントからツリービューへの通知
※ファイルを開いた時。
■ツリー選択時のビューへの通知
・アプリクラスの主ビューのポインタが登録されているか確認し、メッセージをポストする。
■ツリービューのツールバー操作
・ツールバーに追加。
・ビットマップ追加。
・ビューのコマンドハンドラ関数を追加。
※必要があればUI更新ハンドラを追加。
■常時選択状態を表示、ツリーコントロールにコントロールIDを設定する。
///// FileView.cpp /////
int CFileView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
// ビューの作成:
const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS;
if (!m_wndFileView.Create(dwViewStyle, rectDummy, this, /*4*/ID_VIEW_FILEVIEW))
{
TRACE0("ファイル ビューを作成できませんでした\n");
return -1; // 作成できない場合
}
https://blog.goo.ne.jp/yks-systems