メインページ | ファイル一覧 | ファイルメンバ

FormulaDialog.cpp

00001 // FormulaDialog.cpp : インプリメンテーション ファイル 00002 // 00003 00004 #include "stdafx.h" 00005 #include "nexpcsv.h" 00006 #include "FormulaDialog.h" 00007 00008 #ifdef _DEBUG 00009 #define new DEBUG_NEW 00010 #undef THIS_FILE 00011 static char THIS_FILE[] = __FILE__; 00012 #endif 00013 00015 // CFormulaDialog ダイアログ 00016 00017 00018 CFormulaDialog::CFormulaDialog(CWnd* pParent /*=NULL*/) 00019 : CDialog(CFormulaDialog::IDD, pParent) 00020 { 00021 m_nFormSort = 0; 00022 m_nFieldSort = 0; 00023 //{{AFX_DATA_INIT(CFormulaDialog) 00024 //}}AFX_DATA_INIT 00025 } 00026 00027 00028 void CFormulaDialog::DoDataExchange(CDataExchange* pDX) 00029 { 00030 CDialog::DoDataExchange(pDX); 00031 //{{AFX_DATA_MAP(CFormulaDialog) 00032 DDX_Control(pDX, IDC_INSERT_NAME, m_bcInsertName); 00033 DDX_Control(pDX, IDC_FORMULA_EDITER, m_ecFormula); 00034 DDX_Control(pDX, IDC_INSERT_FORMULA, m_bcInsertFormula); 00035 DDX_Control(pDX, IDC_FORM_LIST, m_lcForm); 00036 DDX_Control(pDX, IDC_FIELD_LIST, m_lcField); 00037 //}}AFX_DATA_MAP 00038 } 00039 00040 00041 BEGIN_MESSAGE_MAP(CFormulaDialog, CDialog) 00042 //{{AFX_MSG_MAP(CFormulaDialog) 00043 ON_NOTIFY(LVN_ITEMCHANGED, IDC_FORM_LIST, OnItemchangedFormList) 00044 ON_NOTIFY(LVN_ITEMCHANGED, IDC_FIELD_LIST, OnItemchangedFieldList) 00045 ON_BN_CLICKED(IDC_INSERT_FORMULA, OnInsertFormula) 00046 ON_NOTIFY(NM_DBLCLK, IDC_FIELD_LIST, OnDblclkFieldList) 00047 ON_NOTIFY(LVN_GETDISPINFO, IDC_FORM_LIST, OnGetdispinfoFormList) 00048 ON_NOTIFY(LVN_COLUMNCLICK, IDC_FORM_LIST, OnColumnclickFormList) 00049 ON_NOTIFY(LVN_GETDISPINFO, IDC_FIELD_LIST, OnGetdispinfoFieldList) 00050 ON_NOTIFY(LVN_COLUMNCLICK, IDC_FIELD_LIST, OnColumnclickFieldList) 00051 ON_BN_CLICKED(IDC_INSERT_NAME, OnInsertName) 00052 //}}AFX_MSG_MAP 00053 ON_NOTIFY( LVN_GETINFOTIP, IDC_FORM_LIST, OnInfotipFormList ) 00054 ON_NOTIFY( LVN_GETINFOTIP, IDC_FIELD_LIST, OnInfotipFieldList ) 00055 END_MESSAGE_MAP() 00056 00058 // CFormulaDialog メッセージ ハンドラ 00059 00060 BOOL CFormulaDialog::OnInitDialog() 00061 { 00062 CDialog::OnInitDialog(); 00063 00064 // TODO: この位置に初期化の補足処理を追加してください 00065 00066 //---------------------------------------- 00067 // フォームコントロールにカラム追加 00068 //---------------------------------------- 00069 { 00070 static const struct 00071 { 00072 UINT nColHdrId; 00073 int nFormat; 00074 int nWidth; // パーセントで指定する(合計100) 00075 } colData[] = { 00076 {IDS_FORM_COLNAME1, LVCFMT_LEFT, 100}, 00077 // {IDS_FORM_COLNAME2, LVCFMT_LEFT, 20}, 00078 // {IDS_FORM_COLNAME3, LVCFMT_LEFT, 50}, 00079 }; 00080 const int nColCount = sizeof colData / sizeof colData[0]; 00081 00082 // リストコントロールの幅 - スクロールバー 00083 CRect rc; 00084 m_lcForm.GetClientRect(&rc); 00085 int nCx = GetSystemMetrics(SM_CXVSCROLL); 00086 int nMaxWidth = rc.Width() - nCx; 00087 00088 while( m_lcForm.DeleteColumn(0)); 00089 //---------------------------------------- 00090 // リストコントロールにカラム追加 00091 //---------------------------------------- 00092 for (int nColumn = 0; nColumn < nColCount; nColumn++) 00093 { 00094 CString str; 00095 VERIFY(str.LoadString(colData[nColumn].nColHdrId)); 00096 int nWidth = nMaxWidth * colData[nColumn].nWidth / 100; 00097 m_lcForm.InsertColumn(nColumn, str, colData[nColumn].nFormat, nWidth); 00098 } 00099 00100 // リストコントロールにアイコンのリソースを設定(OR/ANDアイコン) 00101 m_imlFormList.Create(IDB_FORM_TYPE, 16, 1, RGB(255,255,255) ); 00102 m_lcForm.SetImageList( &m_imlFormList, LVSIL_SMALL ); 00103 00104 // m_lcForm.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_LABELTIP); 00105 m_lcForm.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_GRIDLINES); 00106 } 00107 00108 CnExpCsvApp* pApp = (CnExpCsvApp*)AfxGetApp(); 00109 LNDatabase db = pApp->GetDatabase(); 00110 { 00111 LNFormArray arrForms; 00112 db.GetForms(&arrForms); 00113 for (LNINT n=0; n<arrForms.GetCount(); n++) { 00114 LVITEM item; 00115 item.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM; 00116 item.pszText = LPSTR_TEXTCALLBACK; // コールバック 00117 item.iImage = I_IMAGECALLBACK; // コールバック 00118 item.lParam = arrForms.GetNoteID(n); 00119 item.iItem = m_lcForm.GetItemCount(); // 最終行に追加 00120 item.iSubItem = 0; 00121 int nItem = m_lcForm.InsertItem(&item); 00122 } 00123 } 00124 00125 { 00126 LNSubformArray arrSubforms; 00127 db.GetSubforms(&arrSubforms); 00128 for (LNINT n=0; n<arrSubforms.GetCount(); n++) { 00129 LVITEM item; 00130 item.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM; 00131 item.pszText = LPSTR_TEXTCALLBACK; // コールバック 00132 item.iImage = I_IMAGECALLBACK; // コールバック 00133 item.lParam = arrSubforms.GetNoteID(n); 00134 item.iItem = m_lcForm.GetItemCount(); // 最終行に追加 00135 item.iSubItem = 0; 00136 int nItem = m_lcForm.InsertItem(&item); 00137 } 00138 } 00139 00140 //---------------------------------------- 00141 // フィールドリストコントロールのカラム定義 00142 //---------------------------------------- 00143 { 00144 static const struct 00145 { 00146 UINT nColHdrId; 00147 int nFormat; 00148 int nWidth; // パーセントで指定する(合計100) 00149 } colData[] = { 00150 {IDS_FIELD_COLNAME1, LVCFMT_LEFT, 100}, 00151 // {IDS_FIELD_COLNAME2, LVCFMT_LEFT, 60}, 00152 }; 00153 const int nColCount = sizeof colData / sizeof colData[0]; 00154 00155 // リストコントロールの幅 - スクロールバー 00156 CRect rc; 00157 m_lcField.GetClientRect(&rc); 00158 int nCx = GetSystemMetrics(SM_CXVSCROLL); 00159 int nMaxWidth = rc.Width() - nCx; 00160 00161 while( m_lcField.DeleteColumn(0)); 00162 //---------------------------------------- 00163 // リストコントロールにカラム追加 00164 //---------------------------------------- 00165 for (int nColumn = 0; nColumn < nColCount; nColumn++) 00166 { 00167 CString str; 00168 VERIFY(str.LoadString(colData[nColumn].nColHdrId)); 00169 int nWidth = nMaxWidth * colData[nColumn].nWidth / 100; 00170 m_lcField.InsertColumn(nColumn, str, colData[nColumn].nFormat, nWidth); 00171 } 00172 00173 // リストコントロールにアイコンのリソースを設定(OR/ANDアイコン) 00174 m_imlFieldList.Create(IDB_FIELD_TYPE, 16, 1, RGB(255,255,255) ); 00175 m_lcField.SetImageList( &m_imlFieldList, LVSIL_SMALL ); 00176 00177 // m_lcField.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_LABELTIP); 00178 m_lcField.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_GRIDLINES); 00179 } 00180 00181 m_ecFormula.SetWindowText( m_column.GetFormula() ); 00182 00183 m_bcInsertName.EnableWindow(FALSE); 00184 m_bcInsertFormula.EnableWindow(FALSE); 00185 00186 return TRUE; // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります 00187 // 例外: OCX プロパティ ページの戻り値は FALSE となります 00188 } 00189 00190 void CFormulaDialog::OnItemchangedFormList(NMHDR* pNMHDR, LRESULT* pResult) 00191 { 00192 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 00193 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください 00194 00195 int nItem = m_lcForm.GetNextItem(-1, LVNI_ALL | LVIS_FOCUSED); 00196 if (nItem == -1) return; 00197 00198 NOTEID noteid = m_lcForm.GetItemData(nItem); 00199 InitFieldDataArray(noteid); 00200 //---------------------------------------- 00201 // ビューの列情報を設定する 00202 //---------------------------------------- 00203 m_lcField.DeleteAllItems(); 00204 for (int n=0; n<m_arrField.GetSize(); n++) { 00205 LVITEM item; 00206 item.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM; 00207 item.pszText = LPSTR_TEXTCALLBACK; // コールバック 00208 item.iImage = I_IMAGECALLBACK; // コールバック 00209 item.lParam = n; 00210 item.iItem = m_lcField.GetItemCount(); // 最終行に追加 00211 item.iSubItem = 0; 00212 int nItem = m_lcField.InsertItem( &item ); 00213 } 00214 00215 m_bcInsertFormula.EnableWindow(FALSE); 00216 m_bcInsertName.EnableWindow(FALSE); 00217 00218 //---------------------------------------- 00219 // ソート処理開始 00220 //---------------------------------------- 00221 m_lcField.SortItems(CompareFieldList, (LPARAM)this); 00222 00223 *pResult = 0; 00224 } 00225 00226 void CFormulaDialog::OnItemchangedFieldList(NMHDR* pNMHDR, LRESULT* pResult) 00227 { 00228 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 00229 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください 00230 00231 int nItem = m_lcField.GetNextItem(-1, LVNI_ALL | LVIS_FOCUSED); 00232 if (nItem == -1) { 00233 m_bcInsertFormula.EnableWindow(FALSE); 00234 m_bcInsertName.EnableWindow(FALSE); 00235 } else { 00236 m_bcInsertFormula.EnableWindow(TRUE); 00237 int n = m_lcField.GetItemData(nItem); 00238 m_bcInsertName.EnableWindow(GetFieldData(n).GetComputeOption() != LNCOMPUTEOPTION_COMPUTED_FOR_DISPLAY); 00239 } 00240 *pResult = 0; 00241 } 00242 00243 void CFormulaDialog::OnInsertFormula() 00244 { 00245 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください 00246 int nItem = m_lcField.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED); 00247 if (nItem == -1) return; 00248 00249 int n = m_lcField.GetItemData(nItem); 00250 m_ecFormula.ReplaceSel(GetFieldData(n).GetFormula(), TRUE); 00251 } 00252 00253 void CFormulaDialog::OnDblclkFieldList(NMHDR* pNMHDR, LRESULT* pResult) 00254 { 00255 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください 00256 int nItem = m_lcField.GetNextItem(-1, LVNI_ALL | LVIS_FOCUSED); 00257 if (nItem != -1) { 00258 int n = m_lcField.GetItemData(nItem); 00259 if (GetFieldData(n).GetComputeOption() != LNCOMPUTEOPTION_COMPUTED_FOR_DISPLAY) { 00260 OnInsertName(); 00261 } else { 00262 OnInsertFormula(); 00263 } 00264 } 00265 *pResult = 0; 00266 } 00267 00268 BOOL CFormulaDialog::PreTranslateMessage(MSG* pMsg) 00269 { 00270 // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください 00271 // アクセラレータ 00272 // if(m_ecFormula.GetFocus()){ 00273 // if (pMsg->message == WM_KEYDOWN) AfxMessageBox("WM_KEYDOWN"); 00274 // return TRUE; 00275 // } 00276 00277 return CDialog::PreTranslateMessage(pMsg); 00278 } 00279 00280 void CFormulaDialog::SetColumnData(CColumnData &column) 00281 { 00282 m_column = column; 00283 } 00284 00285 CColumnData & CFormulaDialog::GetColumnData() 00286 { 00287 return m_column; 00288 } 00289 00290 void CFormulaDialog::OnOK() 00291 { 00292 // TODO: この位置にその他の検証用のコードを追加してください 00293 try { 00294 CString strFormula; 00295 m_ecFormula.GetWindowText(strFormula); 00296 m_column.SetColumn(strFormula); 00297 } catch(LNSTATUS e) { 00298 char szError[LNERROR_MESSAGE_LENGTH]; 00299 LNGetErrorMessage(e, szError); 00300 CString strMsg; 00301 strMsg.Format(_T("式にエラーがあります。\n%s"), szError); 00302 AfxMessageBox(strMsg); 00303 return; 00304 } 00305 CDialog::OnOK(); 00306 } 00307 00308 void CFormulaDialog::OnGetdispinfoFormList(NMHDR* pNMHDR, LRESULT* pResult) 00309 { 00310 LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR; 00311 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください 00312 CFormData &form = GetFormData((NOTEID)pDispInfo->item.lParam); 00313 const unsigned int nSubItem = pDispInfo->item.iSubItem; 00314 00315 //---------------------------------------- 00316 // AND/ORのイメージを表示 00317 //---------------------------------------- 00318 if (pDispInfo->item.mask & LVIF_IMAGE) 00319 { 00320 pDispInfo->item.iImage = form.IsForm() ? 0:1; 00321 } 00322 //---------------------------------------- 00323 // 文字列を表示 00324 //---------------------------------------- 00325 if (pDispInfo->item.mask & LVIF_TEXT) 00326 { 00327 switch (nSubItem) 00328 { 00329 case 0: // 検索属性名 00330 pDispInfo->item.pszText = (LPSTR)form.GetName(); 00331 break; 00332 default: 00333 pDispInfo->item.pszText = "-"; 00334 break; 00335 } 00336 } 00337 00338 *pResult = 0; 00339 } 00340 00341 CFormData &CFormulaDialog::GetFormData(NOTEID note) 00342 { 00343 CFormData form; 00344 if (!m_mapForm.Lookup( note, form ) ) { 00345 form.Init(note); 00346 m_mapForm[note] = form; 00347 } 00348 return m_mapForm[note]; 00349 } 00350 00351 void CFormulaDialog::InitFieldDataArray(NOTEID noteid, BOOL bRemove) 00352 { 00353 if (bRemove) m_arrField.RemoveAll(); 00354 00355 CnExpCsvApp* pApp = (CnExpCsvApp*)AfxGetApp(); 00356 LNDatabase db = pApp->GetDatabase(); 00357 LNNote note; 00358 try { 00359 db.GetNote(noteid, &note); 00360 note.Open(LNNOTEOPENFLAGS_NO_OBJECTS); 00361 LNITEMTYPE itemtype = note.GetItemType(_T("$BODY")); 00362 if ( itemtype == LNITEMTYPE_RICHTEXT ) { 00363 LNRichText richtext; 00364 note.GetItem(_T("$BODY"), &richtext); 00365 LNRTCursor cursor; 00366 richtext.GetCursor(&cursor); 00367 00368 LNFormField field; 00369 cursor.GotoFirst(LNRTTYPE_FORM_FIELD, &field); 00370 while (!field.IsNull()) { 00371 CFieldData fieldData; 00372 fieldData.Init(field); 00373 m_arrField.Add(fieldData); 00374 cursor.GotoNext(LNRTTYPE_FORM_FIELD, &field); 00375 } 00376 00377 LNRTSubform rtsubform; 00378 cursor.GotoFirst(LNRTTYPE_SUBFORM, &rtsubform); 00379 while (!rtsubform.IsNull()) { 00380 LNSubform subform; 00381 rtsubform.GetSubform( &subform ); 00382 InitFieldDataArray( subform.GetNoteID(), FALSE ); 00383 cursor.GotoNext(LNRTTYPE_SUBFORM, &rtsubform); 00384 } 00385 00386 } 00387 } catch (LNSTATUS e) { 00388 char ErrorBuf[LNERROR_MESSAGE_LENGTH]; 00389 LNGetErrorMessage(e, ErrorBuf); 00390 AfxMessageBox(ErrorBuf); 00391 } 00392 note.Close(); 00393 } 00394 00395 CFieldData &CFormulaDialog::GetFieldData(int n) 00396 { 00397 return m_arrField[n]; 00398 } 00399 00400 00401 void CFormulaDialog::OnColumnclickFormList(NMHDR* pNMHDR, LRESULT* pResult) 00402 { 00403 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 00404 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください 00405 00406 //---------------------------------------- 00407 // 前回と同じ列をクリックなら+/-入れ替え 00408 //---------------------------------------- 00409 switch (m_nFormSort) { 00410 case 1: m_nFormSort = 2; break; 00411 case 2: m_nFormSort = -2; break; 00412 case -2: m_nFormSort = 1; break; 00413 default: m_nFormSort = 1; break; 00414 } 00415 00416 LPCTSTR szColumn = _T("フォーム"); 00417 switch (m_nFormSort) { 00418 case 1: szColumn = _T("フォーム : タイプ別"); break; 00419 case 2: szColumn = _T("フォーム : 名前順▼"); break; 00420 case -2: szColumn = _T("フォーム : 名前順▲"); break; 00421 } 00422 LVCOLUMN column; 00423 column.mask = LVCF_TEXT; 00424 column.pszText = (LPTSTR)szColumn; 00425 m_lcForm.SetColumn(0, &column); 00426 //---------------------------------------- 00427 // ソート処理開始 00428 //---------------------------------------- 00429 m_lcForm.SortItems(CompareFormLiat, (LPARAM)this); 00430 00431 *pResult = 0; 00432 } 00433 00434 /*====================================================================== 00435 ユーザリストのソート処理のコールバックルーチン 00436 ※入り口はstaticメンバー、実際の処理はクラスメンバーで行う 00437 00438 int CALLBACK CompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) 00439 00440 引数: アイテム1のパラメータ値、アイテム2のパラメータ値、this 00441 戻り: 比較結果 00442 ----------------------------------------------------------------------*/ 00443 int CALLBACK CFormulaDialog::CompareFormLiat(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) 00444 { 00445 // staticメンバーからクラスメンバーを呼び出す 00446 CFormulaDialog* _this = (CFormulaDialog*)lParamSort; 00447 return _this->CompareFormLiat(lParam1, lParam2); 00448 } 00449 00450 /*====================================================================== 00451 ソートするアイテムの比較処理 00452 00453 int CompareItems(LPARAM lParam1, LPARAM lParam2) 00454 00455 引数: アイテム1のパラメータ値、アイテム2のパラメータ値 00456 戻り: 比較結果 00457 ----------------------------------------------------------------------*/ 00458 int CFormulaDialog::CompareFormLiat(LPARAM lParam1, LPARAM lParam2) 00459 { 00460 bool bComplementResult; 00461 int result = 0; 00462 //---------------------------------------- 00463 // LPARAMにはNOTEIDが入っている 00464 //---------------------------------------- 00465 CFormData &form1 = GetFormData((NOTEID)lParam1); 00466 CFormData &form2 = GetFormData((NOTEID)lParam2); 00467 00468 //---------------------------------------- 00469 // マイナスなら降順ソート 00470 //---------------------------------------- 00471 int lParamSort = m_nFormSort; 00472 if (lParamSort < 0) 00473 { 00474 lParamSort = -lParamSort; 00475 bComplementResult = true; 00476 } 00477 else 00478 bComplementResult = false; 00479 00480 //---------------------------------------- 00481 // lParamSort は 1〜COL だが 0〜COL-1にする 00482 //---------------------------------------- 00483 LPCTSTR arrColumn[] = { 00484 {""}, 00485 {"TN"}, 00486 {"NT"}, 00487 }; 00488 LPCTSTR szColumn = arrColumn[lParamSort]; 00489 00490 int n =0; 00491 while (szColumn[n] != 0x00) 00492 { 00493 const char *szText1 = _T(""); 00494 const char *szText2 = _T(""); 00495 switch (szColumn[n++]) 00496 { 00497 case _TCHAR('T'): 00498 szText1 = form1.IsForm() ? _T("0") : _T("1"); 00499 szText2 = form2.IsForm() ? _T("0") : _T("1"); 00500 break; 00501 default: 00502 szText1 = form1.GetName(); 00503 szText2 = form2.GetName(); 00504 break; 00505 } 00506 00507 //--- 文字列比較する(大文字小文字は判別しない) 00508 result = stricmp(szText1, szText2); 00509 if (result != 0) break; 00510 } 00511 00512 //---------------------------------------- 00513 // 降順ソートなら符号を反転 00514 //---------------------------------------- 00515 if (bComplementResult) result = -result; 00516 return result; 00517 } 00518 00519 00520 void CFormulaDialog::OnGetdispinfoFieldList(NMHDR* pNMHDR, LRESULT* pResult) 00521 { 00522 LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR; 00523 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください 00524 CFieldData &field = GetFieldData(pDispInfo->item.lParam); 00525 const unsigned int nSubItem = pDispInfo->item.iSubItem; 00526 00527 //---------------------------------------- 00528 // AND/ORのイメージを表示 00529 //---------------------------------------- 00530 if (pDispInfo->item.mask & LVIF_IMAGE) 00531 { 00532 switch (field.GetComputeOption()) 00533 { 00534 case LNCOMPUTEOPTION_EDITABLE: 00535 pDispInfo->item.iImage = 1; 00536 break; 00537 case LNCOMPUTEOPTION_COMPUTED: 00538 pDispInfo->item.iImage = 2; 00539 break; 00540 case LNCOMPUTEOPTION_COMPUTED_FOR_DISPLAY: 00541 pDispInfo->item.iImage = 3; 00542 break; 00543 case LNCOMPUTEOPTION_COMPUTED_WHEN_COMPOSED: 00544 pDispInfo->item.iImage = 4; 00545 break; 00546 default: 00547 pDispInfo->item.iImage = 0; 00548 break; 00549 } 00550 } 00551 //---------------------------------------- 00552 // 文字列を表示 00553 //---------------------------------------- 00554 if (pDispInfo->item.mask & LVIF_TEXT) 00555 { 00556 switch (nSubItem) 00557 { 00558 case 0: // 検索属性名 00559 pDispInfo->item.pszText = (LPSTR)field.GetName(); 00560 break; 00561 default: 00562 pDispInfo->item.pszText = "-"; 00563 break; 00564 } 00565 } 00566 00567 *pResult = 0; 00568 } 00569 00570 void CFormulaDialog::OnColumnclickFieldList(NMHDR* pNMHDR, LRESULT* pResult) 00571 { 00572 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 00573 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください 00574 00575 //---------------------------------------- 00576 // 前回と同じ列をクリックなら+/-入れ替え 00577 //---------------------------------------- 00578 switch (m_nFieldSort) { 00579 case 1: m_nFieldSort = 2; break; 00580 case 2: m_nFieldSort = -2; break; 00581 case -2: m_nFieldSort = 1; break; 00582 default: m_nFieldSort = 1; break; 00583 } 00584 00585 LPCTSTR szColumn = _T("フィールド"); 00586 switch (m_nFieldSort) { 00587 case 1: szColumn = _T("フィールド : タイプ別"); break; 00588 case 2: szColumn = _T("フィールド : 名前順▼"); break; 00589 case -2: szColumn = _T("フィールド : 名前順▲"); break; 00590 } 00591 00592 LVCOLUMN column; 00593 column.mask = LVCF_TEXT; 00594 column.pszText = (LPTSTR)szColumn; 00595 m_lcField.SetColumn(0, &column); 00596 //---------------------------------------- 00597 // ソート処理開始 00598 //---------------------------------------- 00599 m_lcField.SortItems(CompareFieldList, (LPARAM)this); 00600 00601 *pResult = 0; 00602 } 00603 00604 /*====================================================================== 00605 ユーザリストのソート処理のコールバックルーチン 00606 ※入り口はstaticメンバー、実際の処理はクラスメンバーで行う 00607 00608 int CALLBACK CompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) 00609 00610 引数: アイテム1のパラメータ値、アイテム2のパラメータ値、this 00611 戻り: 比較結果 00612 ----------------------------------------------------------------------*/ 00613 int CALLBACK CFormulaDialog::CompareFieldList(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) 00614 { 00615 // staticメンバーからクラスメンバーを呼び出す 00616 CFormulaDialog* _this = (CFormulaDialog*)lParamSort; 00617 return _this->CompareFieldList(lParam1, lParam2); 00618 } 00619 00620 /*====================================================================== 00621 ソートするアイテムの比較処理 00622 00623 int CompareItems(LPARAM lParam1, LPARAM lParam2) 00624 00625 引数: アイテム1のパラメータ値、アイテム2のパラメータ値 00626 戻り: 比較結果 00627 ----------------------------------------------------------------------*/ 00628 int CFormulaDialog::CompareFieldList(LPARAM lParam1, LPARAM lParam2) 00629 { 00630 bool bComplementResult; 00631 int result = 0; 00632 //---------------------------------------- 00633 // LPARAMにはNOTEIDが入っている 00634 //---------------------------------------- 00635 CFieldData &field1 = GetFieldData(lParam1); 00636 CFieldData &field2 = GetFieldData(lParam2); 00637 00638 //---------------------------------------- 00639 // マイナスなら降順ソート 00640 //---------------------------------------- 00641 int lParamSort = m_nFieldSort; 00642 if (lParamSort < 0) 00643 { 00644 lParamSort = -lParamSort; 00645 bComplementResult = true; 00646 } 00647 else 00648 bComplementResult = false; 00649 00650 00651 LPCTSTR arrColumn[] = { 00652 {""}, 00653 {"TN"}, 00654 {"NT"}, 00655 }; 00656 LPCTSTR szColumn = arrColumn[lParamSort]; 00657 00658 int n =0; 00659 while (szColumn[n] != 0x00) 00660 { 00661 const char *szText1 = _T(""); 00662 const char *szText2 = _T(""); 00663 switch (szColumn[n++]) { 00664 case _TCHAR('T'): 00665 switch (field1.GetComputeOption()) { 00666 case LNCOMPUTEOPTION_EDITABLE: szText1 = _T("1"); break; 00667 case LNCOMPUTEOPTION_COMPUTED: szText1 = _T("2"); break; 00668 case LNCOMPUTEOPTION_COMPUTED_FOR_DISPLAY: szText1 = _T("3"); break; 00669 case LNCOMPUTEOPTION_COMPUTED_WHEN_COMPOSED:szText1 = _T("4"); break; 00670 } 00671 switch (field2.GetComputeOption()) { 00672 case LNCOMPUTEOPTION_EDITABLE: szText2 = _T("1"); break; 00673 case LNCOMPUTEOPTION_COMPUTED: szText2 = _T("2"); break; 00674 case LNCOMPUTEOPTION_COMPUTED_FOR_DISPLAY: szText2 = _T("3"); break; 00675 case LNCOMPUTEOPTION_COMPUTED_WHEN_COMPOSED:szText2 = _T("4"); break; 00676 } 00677 break; 00678 default: 00679 szText1 = field1.GetName(); 00680 szText2 = field2.GetName(); 00681 break; 00682 } 00683 00684 //--- 文字列比較する(大文字小文字は判別しない) 00685 result = stricmp(szText1, szText2); 00686 if (result != 0) break; 00687 } 00688 00689 //---------------------------------------- 00690 // 降順ソートなら符号を反転 00691 //---------------------------------------- 00692 if (bComplementResult) result = -result; 00693 return result; 00694 } 00695 00696 void CFormulaDialog::OnInsertName() 00697 { 00698 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください 00699 int nItem = m_lcField.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED); 00700 if (nItem == -1) return; 00701 00702 int n = m_lcField.GetItemData(nItem); 00703 m_ecFormula.ReplaceSel(GetFieldData(n).GetName(), TRUE); 00704 } 00705 00706 void CFormulaDialog::OnInfotipFormList( NMHDR * pNMHDR, LRESULT * pResult ) 00707 { 00708 NMLVGETINFOTIP*pInfoTip = reinterpret_cast<NMLVGETINFOTIP*>(pNMHDR); 00709 ASSERT(pInfoTip); 00710 00711 NOTEID noteid = (NOTEID)m_lcForm.GetItemData(pInfoTip->iItem); 00712 CFormData &form = GetFormData(noteid); 00713 CString strTip; 00714 strTip.Format(_T("名前 : %s\r\n別名 : %s\r\nコメント : %s"), form.GetName(), form.GetAlias(), form.GetComment()); 00715 _tcsncpy(pInfoTip->pszText, strTip, pInfoTip->cchTextMax); 00716 } 00717 00718 void CFormulaDialog::OnInfotipFieldList( NMHDR * pNMHDR, LRESULT * pResult ) 00719 { 00720 NMLVGETINFOTIP*pInfoTip = reinterpret_cast<NMLVGETINFOTIP*>(pNMHDR); 00721 ASSERT(pInfoTip); 00722 00723 int n = m_lcField.GetItemData(pInfoTip->iItem); 00724 CFieldData &field = GetFieldData(n); 00725 CString strTip; 00726 LPCTSTR szComputeOption = _T(""); 00727 switch (field.GetComputeOption()) { 00728 case LNCOMPUTEOPTION_EDITABLE: szComputeOption = _T("編集可能"); break; 00729 case LNCOMPUTEOPTION_COMPUTED: szComputeOption = _T("計算結果"); break; 00730 case LNCOMPUTEOPTION_COMPUTED_FOR_DISPLAY: szComputeOption = _T("表示用の計算結果"); break; 00731 case LNCOMPUTEOPTION_COMPUTED_WHEN_COMPOSED:szComputeOption = _T("作成時の計算結果"); break; 00732 } 00733 strTip.Format(_T("名前 : %s\r\n種類 : %s\r\nヘルプの説明 : %s"), field.GetName(), szComputeOption, field.GetHelpDescription()); 00734 _tcsncpy(pInfoTip->pszText, strTip, pInfoTip->cchTextMax); 00735 }

LotusNotes CSV Export Plug-inに対してWed Jun 30 15:53:52 2004に生成されました。 doxygen 1.3.7